sql,SELECT , u.id, u.name, COUNT(o.id) AS order_count,FROM , users u,LEFT JOIN , orders o ON u.id = o.user_id,WHERE , u.status = 'active',GROUP BY , u.id, u.name,HAVING , order_count > 5,ORDER BY , order_count DESC;,
`,,这个查询从
users 表和
orders` 表中获取数据,筛选出状态为 “active” 的用户,并统计每个用户的订单数量。它只返回订单数量大于5的用户,并按订单数量降序排列结果。MySQL复杂查询实例详解
在数据库管理中,复杂查询是提升数据分析和处理能力的关键,本文将通过多个实例详细讲解如何在MySQL中进行复杂查询,包括子查询、联合查询、聚合函数等高级功能。
1. 子查询(Subquery)
1 什么是子查询?
子查询是指一个查询嵌套在另一个查询之中,子查询可以出现在SELECT
、FROM
、WHERE
、HAVING
等子句中。
2 实例:查找每个部门工资最高的员工
假设我们有一个名为employees
的表,包含以下列:
employee_id
: 员工ID
name
: 员工姓名
department_id
: 部门ID
salary
: 工资
创建示例表并插入数据 CREATE TABLE employees ( employee_id INT PRIMARY KEY, name VARCHAR(50), department_id INT, salary DECIMAL(10, 2) ); INSERT INTO employees (employee_id, name, department_id, salary) VALUES (1, 'Alice', 1, 5000.00), (2, 'Bob', 1, 6000.00), (3, 'Charlie', 2, 7000.00), (4, 'David', 2, 8000.00), (5, 'Eve', 3, 9000.00);
要查找每个部门工资最高的员工,可以使用以下查询:
SELECT e1.name, e1.department_id, e1.salary FROM employees e1 WHERE e1.salary = ( SELECT MAX(e2.salary) FROM employees e2 WHERE e2.department_id = e1.department_id );
3 结果分析
Name | Department_id | Salary |
Bob | 1 | 6000.00 |
David | 2 | 8000.00 |
Eve | 3 | 9000.00 |
此查询首先为每个department_id
找到最高工资,然后在外部查询中匹配这些最高工资的员工信息。
2. 联合查询(Joins)
1 什么是联合查询?
联合查询用于将来自两个或多个表的数据组合在一起,常见的联合类型有 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL OUTER JOIN。
2 实例:查找员工及其部门名称
假设我们有一个额外的表departments
,包含以下列:
department_id
: 部门ID
department_name
: 部门名称
创建示例表并插入数据 CREATE TABLE departments ( department_id INT PRIMARY KEY, department_name VARCHAR(50) ); INSERT INTO departments (department_id, department_name) VALUES (1, 'HR'), (2, 'Engineering'), (3, 'Marketing');
要查找每个员工及其所属部门的名称,可以使用 INNER JOIN:
SELECT e.name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id;
3 结果分析
Name | Department_name |
Alice | HR |
Bob | HR |
Charlie | Engineering |
David | Engineering |
Eve | Marketing |
此查询通过department_id
将employees
表和departments
表连接起来,从而获取每个员工对应的部门名称。
3. 聚合函数(Aggregate Functions)
1 什么是聚合函数?
聚合函数用于执行计算并返回单一值,如计数、总和、平均值等,常见的聚合函数包括COUNT()
,SUM()
,AVG()
,MAX()
,MIN()
。
3.2 实例:统计各部门的工资总额和平均工资
要统计每个部门的工资总额和平均工资,可以使用以下查询:
SELECT department_id, SUM(salary) AS total_salary, AVG(salary) AS average_salary FROM employees GROUP BY department_id;
3 结果分析
Department_id | Total_salary | Average_salary |
1 | 11000.00 | 5500.00 |
2 | 15000.00 | 7500.00 |
3 | 9000.00 | 9000.00 |
此查询通过GROUP BY
按department_id
分组,并使用SUM()
和AVG()
聚合函数计算每个部门的工资总额和平均工资。
相关问题与解答
问题1:如何在MySQL中实现全外连接(FULL OUTER JOIN)?
解答:MySQL不直接支持FULL OUTER JOIN,但可以通过UNION来实现,要实现employees
表和departments
表的全外连接,可以使用以下查询:
SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id UNION SELECT e.name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department_id = d.department_id;
问题2:如何在MySQL中使用窗口函数?
解答:MySQL 8.0及以上版本支持窗口函数,窗口函数允许你在查询结果集中执行复杂的计算,要为每个员工添加一个排名列,可以使用以下查询:
SELECT name, department_id, salary, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank FROM employees;
这个查询将为每个部门的员工按工资降序排名。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/69062.html