常用数据类型

数据查询
1. 基本语法:选择特定列
-- 查询 employees 表中的 first_name 和 last_name 列
SELECT first_name, last_name FROM employees;
2. 检索所有列
-- 查询 employees 表中的所有列和所有行
SELECT * FROM employees;
3. 使用 DISTINCT去重
-- 查询 employees 表中不重复的部门名称
SELECT DISTINCT department FROM employees;
4. 使用 WHERE条件筛选
-- 查询工资大于 50000 的所有员工信息
SELECT * FROM employees WHERE salary > 50000;
5. 使用 ORDER BY排序
-- 查询所有员工信息,并按入职日期从晚到近排序
SELECT * FROM employees ORDER BY hire_date DESC;
DESC - Descending(降序):从大到小、从晚到早、从 Z 到 A
ASC - Ascending(升序):从小到大、从早到晚、从 A 到 Z
6. 使用 LIMIT限制结果数量
-- 查询 employees 表的前 10 条记录
SELECT * FROM employees LIMIT 10;
7. 使用聚合函数
-- 计算 employees 表中所有员工的平均工资
SELECT AVG(salary) AS avg_salary FROM employees;
AVG()是一个聚合函数,用于计算一组数值的平均值。
这里的 salary是列名,函数会计算该列所有非空值的平均值。
加上 AS avg_salary后,结果列会有一个清晰的名称 avg_salary。
8. 使用 GROUP BY分组
-- 按部门分组,统计每个部门的员工人数
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;
9. 使用 HAVING过滤分组结果
-- 按部门分组计算平均工资,只显示平均工资大于 60000 的部门
SELECT department, AVG(salary) AS avg_salary FROM employees
GROUP BY department HAVING AVG(salary) > 60000;
10. 连接多个表
-- 连接 employees 和 departments 表,查询员工姓名及其部门名称
SELECT e.name, d.department_name FROM employees e
JOIN departments d ON e.department_id = d.id;
11. 使用子查询
-- 查询部门所在地为 'New York' 的所有员工姓名
SELECT name FROM employees WHERE department_id IN
(SELECT id FROM departments WHERE location = 'New York');
12. 使用 CASE条件判断
-- 查询员工姓名,并根据工资水平添加分类标签
SELECT name,
CASE
WHEN salary > 70000 THEN 'High'
WHEN salary > 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
13. 使用 LIKE模糊匹配
-- 查询姓名以 'J' 开头的所有员工姓名
SELECT name FROM employees WHERE name LIKE 'J%';
14. 组合查询结果
-- 合并 employees 和 contractors 表的姓名,并自动去重
SELECT name FROM employees
UNION
SELECT name FROM contractors;
15. 无表查询
-- 直接计算表达式(某些数据库支持)
SELECT 1 + 1;
- 不同数据库系统(MySQL、PostgreSQL、SQL Server等)可能在语法细节上略有差异
SQL语言向表格中添加、更新、删除记录
好的,SQL 中用于修改表中数据(而非查询)的三个核心命令是:
-
INSERT - 向表中添加新记录 -
UPDATE - 更新表中已存在的记录 -
DELETE - 从表中删除记录
1. INSERT - 添加新记录
功能:向表中插入一行或多行新数据。
基本语法(插入单行,指定列):
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);
示例:
-- 向 employees 表插入一条新员工记录
INSERT INTO employees (first_name, last_name, salary, hire_date, department_id)
VALUES ('小明', '张', 75000, '2024-03-20', 3);
-- 解释:在 employees 表中为员工"张小明"创建一条记录,设置其薪资、入职日期和部门ID
插入多行:
INSERT INTO employees (first_name, last_name, department_id)
VALUES
('小红', '李', 2),
('小刚', '王', 1),
('小美', '刘', 3);
插入查询结果:(查询+插入)
-- 从 interns 表中选择优秀实习生转为正式员工
INSERT INTO employees (first_name, last_name, salary, department_id)
SELECT name, surname, 50000, dept_id
FROM interns
WHERE performance = 'A';
2. UPDATE - 更新现有记录
功能 :修改表中已存在的数据。必须使用 WHERE子句指定要更新哪些行,否则会更新整个表!
基本语法:
UPDATE 表名
SET 列1 = 新值1, 列2 = 新值2, ...
WHERE 条件;
示例:
-- 为部门ID为2的所有员工加薪10%
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 2;
-- 解释:找到部门ID为2的员工,将他们的 salary 列值更新为原值的1.1倍
-- 更新特定员工的职位和薪资
UPDATE employees
SET position = 'Senior Manager', salary = 90000
WHERE employee_id = 101;
-- 解释:将员工ID为101的员工的职位和薪资更新为新值
重要警告 :忘记 WHERE子句会导致灾难!
-- 错误示范:这将更新表中所有行!
UPDATE employees SET salary = 50000; -- 所有人的工资都变成 50000!
3. DELETE - 删除记录
功能 :从表中删除一行或多行。必须使用 WHERE子句指定要删除哪些行,否则会清空整个表!
基本语法:
DELETE FROM 表名
WHERE 条件;
示例:
-- 删除离职员工(离职日期不为空的记录)
DELETE FROM employees
WHERE resignation_date IS NOT NULL;
-- 解释:从 employees 表中删除那些 resignation_date 列不为空的记录(已离职员工)
-- 删除特定员工
DELETE FROM employees
WHERE employee_id = 205;
-- 解释:删除员工ID为205的记录
重要警告 :忘记 WHERE子句会导致灾难!
-- 错误示范:这将删除表中所有数据!
DELETE FROM employees; -- 整个表被清空!
关键注意事项总结:
-
数据备份 :在执行
UPDATE或DELETE前,尤其是在生产环境,最好先备份数据或使用事务。 -
WHERE子句是安全阀 :对于UPDATE和DELETE,永远 先检查WHERE条件是否正确。可以先使用SELECT测试:-- 先查询确认要操作的数据 SELECT * FROM employees WHERE department_id = 2; -- 确认无误后,再执行 UPDATE UPDATE employees SET salary = salary * 1.1 WHERE department_id = 2; -
事务控制 :可以使用
BEGIN TRANSACTION开始事务,确认无误后COMMIT,有问题则ROLLBACK。 -
TRUNCATE TABLE命令 :如果想快速删除表中所有数据(不可恢复,不触发删除触发器),可以使用:TRUNCATE TABLE employees; -- 清空整个表,比 DELETE 快与
DELETE不同,TRUNCATE不能加WHERE条件,且会重置自增ID。