在 MySQL 中,更新、删除、分组和聚合查询是非常重要的操作。掌握这些操作可以帮助你进行更高效的数据处理和分析。下面,我们将通过几个实例来复习 MySQL 中的常见操作,涵盖 更新、删除、分组 和 聚合查询。
1. 更新数据(UPDATE)
UPDATE
语句用于修改表中的现有数据。其基本语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
示例 1: 更新单个字段
假设有一个名为 employees
的表,包含 name
和 salary
字段,我们需要将员工 Alice
的工资更新为 5000。
UPDATE employees
SET salary = 5000
WHERE name = 'Alice';
示例 2: 更新多个字段
如果我们想同时更新多个字段,比如更新员工 Alice
的工资和职位:
UPDATE employees
SET salary = 5500, position = 'Manager'
WHERE name = 'Alice';
注意事项
- 使用
WHERE
子句非常重要,否则会更新表中的所有记录。 - 可以使用子查询来进行更复杂的更新操作。
2. 删除数据(DELETE)
DELETE
语句用于删除表中的记录。其基本语法如下:
DELETE FROM table_name
WHERE condition;
示例 1: 删除单个记录
假设我们要删除名为 Alice
的员工记录:
DELETE FROM employees
WHERE name = 'Alice';
示例 2: 删除多个记录
假设我们想删除所有工资低于 3000 的员工:
DELETE FROM employees
WHERE salary < 3000;
注意事项
- 同样地,删除操作应使用
WHERE
条件,否则会删除所有记录。 - 可以使用
TRUNCATE
语句清空整个表,它比DELETE
更高效,但不能回滚。
3. 分组查询(GROUP BY)
GROUP BY
用于将查询结果按某一列进行分组,通常与聚合函数(如 COUNT
, SUM
, AVG
等)一起使用。
示例 1: 按部门分组,查询每个部门的员工数
假设我们有一个 employees
表,包含 department
和 name
字段,我们可以按部门分组查询每个部门的员工数量:
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;
示例 2: 按部门分组,查询每个部门的总工资
我们也可以使用 SUM
来计算每个部门的总工资:
SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department;
注意事项
GROUP BY
必须配合聚合函数一起使用,否则会报错。- 你还可以使用
HAVING
子句过滤分组后的结果。
4. 聚合函数
聚合函数用于计算一组数据的单一结果。常见的聚合函数包括:
COUNT()
:计算行数SUM()
:计算总和AVG()
:计算平均值MIN()
:计算最小值MAX()
:计算最大值
示例 1: 查询总工资
SELECT SUM(salary) AS total_salary
FROM employees;
示例 2: 查询平均工资
SELECT AVG(salary) AS average_salary
FROM employees;
示例 3: 查询部门的最大工资
SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department;
5. 使用 HAVING 过滤分组结果
HAVING
子句用于在分组后进行筛选,类似于 WHERE
,但 WHERE
不能用于聚合查询。只有在 GROUP BY
后使用聚合函数时,才使用 HAVING
。
示例 1: 查询每个部门的员工数大于 5 的部门
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
示例 2: 查询每个部门的总工资超过 10000 的部门
SELECT department, SUM(salary) AS total_salary
FROM employees
GROUP BY department
HAVING SUM(salary) > 10000;
6. 排序(ORDER BY)
ORDER BY
子句用于对查询结果进行排序。默认是升序排序,使用 DESC
可以进行降序排序。
示例 1: 按工资升序排序
SELECT name, salary
FROM employees
ORDER BY salary ASC;
示例 2: 按工资降序排序
SELECT name, salary
FROM employees
ORDER BY salary DESC;
示例 3: 按部门和工资排序
你可以同时按多个列排序:
SELECT name, department, salary
FROM employees
ORDER BY department ASC, salary DESC;
7. 更新数据时使用子查询
有时,你需要使用子查询来动态获取数据并更新记录。例如,我们想把工资低于某个部门平均工资的员工的工资提升 10%。
UPDATE employees
SET salary = salary * 1.1
WHERE salary < (
SELECT AVG(salary)
FROM employees
WHERE department = 'Sales'
);
8. 示例:综合应用(从更新、删除到分组聚合查询)
假设我们有一个 sales
表,包含 id
, product_name
, quantity_sold
, sale_price
, salesperson
等字段,我们想要进行一系列操作:
8.1 查询每个销售员的总销售额
SELECT salesperson, SUM(quantity_sold * sale_price) AS total_sales
FROM sales
GROUP BY salesperson;
8.2 更新销售员的销售业绩
假设我们要为销售员“John”增加销售额 10%:
UPDATE sales
SET sale_price = sale_price * 1.1
WHERE salesperson = 'John';
8.3 删除低于销售目标的记录
删除那些销售额低于 500 的记录:
DELETE FROM sales
WHERE quantity_sold * sale_price < 500;
8.4 查找销售额最高的产品
SELECT product_name, SUM(quantity_sold * sale_price) AS total_sales
FROM sales
GROUP BY product_name
ORDER BY total_sales DESC
LIMIT 1;
总结
- 更新数据:使用
UPDATE
修改记录,需小心使用WHERE
子句避免更新所有记录。 - 删除数据:使用
DELETE
删除记录,同样要小心使用WHERE
,否则会删除全部记录。 - 分组查询:使用
GROUP BY
对数据进行分组,结合聚合函数进行分析。 - 聚合函数:
COUNT
,SUM
,AVG
,MIN
,MAX
等聚合函数帮助你进行统计分析。 - HAVING:在分组后进行条件过滤,通常与聚合函数一起使用。
掌握这些基本的 SQL 操作,可以帮助你高效地进行数据库管理和数据分析。如果你有更复杂的需求,可以根据这些基础操作进行组合和扩展。
发表回复