MySQL数据库查询语句深入解析与实战案例
基础查询语句回顾
在深入之前,我们先简要回顾一下基础查询语句:
- SELECT: 用于选择数据。
- FROM: 指定数据来源的表。
- WHERE: 设置条件过滤数据。
- ORDER BY: 对结果进行排序。
- GROUP BY: 将数据分组。
- JOIN: 连接多个表的数据。
高级查询语句
1. 使用聚合函数
除了基本的COUNT()
, SUM()
, AVG()
, MIN()
, MAX()
之外,还可以使用GROUP_CONCAT()
进行字符串的聚合。
SELECT department_id, GROUP_CONCAT(employee_name SEPARATOR ', ') AS employees
FROM employees
GROUP BY department_id;
2. HAVING子句
HAVING子句用于对分组后的结果进行过滤,类似于WHERE子句,但作用于聚合函数。
SELECT department_id, COUNT(*) AS num_employees
FROM employees
GROUP BY department_id
HAVING num_employees > 10;
3. DISTINCT关键字
使用DISTINCT
可以返回唯一不同的值。
SELECT DISTINCT department_id FROM employees;
4. LIKE和通配符
使用LIKE
操作符和通配符%
(匹配任意字符出现任意次数)或_
(匹配单个字符)进行模式匹配。
SELECT * FROM employees WHERE first_name LIKE 'A%';
5. 子查询
子查询是嵌套在另一个查询中的查询,可以用于复杂的数据检索。
SELECT * FROM orders
WHERE order_id IN (SELECT order_id FROM order_items GROUP BY order_id HAVING COUNT(*) > 5);
6. UNION和UNION ALL
用于合并两个或多个SELECT
语句的结果集。
SELECT employee_id, first_name FROM employees
UNION ALL
SELECT customer_id, first_name FROM customers;
实战案例分析
案例1:员工薪资范围查询
查询薪资在特定范围内的员工信息。
SELECT *
FROM employees
WHERE salary BETWEEN 30000 AND 50000;
案例2:多条件查询
查询特定部门并且薪资高于平均薪资的员工。
SELECT *
FROM employees
WHERE department_id = 3 AND salary > (SELECT AVG(salary) FROM employees WHERE department_id = 3);
案例3:日期查询
查询在特定日期之后入职的员工。
SELECT *
FROM employees
WHERE hire_date > '2023-01-01';
案例4:使用LIMIT限制结果数量
查询薪资最高的前三名员工。
SELECT *
FROM employees
ORDER BY salary DESC
LIMIT 3;
案例5:复杂的JOIN查询
查询每个员工的姓名和他们所在部门的名称。
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
案例6:使用窗口函数
查询每个部门员工薪资的排名。
SELECT department_id, first_name, salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS salary_rank
FROM employees;
结语
通过本周的深入解析和实战案例,我们可以看到MySQL查询语句的多样性和强大能力。无论是基础的SELECT查询,还是复杂的聚合、连接和子查询,MySQL都能提供强大的支持来满足不同的数据检索需求。掌握这些查询技巧,将极大地提升处理数据库的能力。