使用逻辑运算符
- AND 用于同时满足多个条件。
- OR 用于满足任一条件
mysql
SELECT * FROM employees WHERE department = 'Sales' AND salary > 50000;
- 从
employees
表中选取所有在 "Sales" 部门工作且薪水高于50,000的员工记录。
子查询
子查询是在一个 SELECT 语句中嵌套另一个 SELECT 语句,用于从一个表中获取数据作为另一个查询的条件。
mysql
SELECT * FROM employees
WHERE department_id IN (SELECT id FROM departments WHERE location = 'New York');
- 从
employees
表中选取所有属于位于 "New York" 部门的员工记录。具体来说,它首先找到所有在 "New York" 的部门 ID,然后再找出这些部门中的员工信息。
JOIN操作
JOIN 操作允许你从多个表中结合相关的数据,常见的有 INNER JOIN、LEFT JOIN 等
mysql
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
- 从
employees
表和departments
表中选择所有员工的姓名及其对应部门名称。只有当员工的部门 ID 与相应部门的 ID 匹配时,相关记录才会被选中。
UNION
UNION 将两个或多个 SELECT 查询结果合并为一个结果集
mysql
SELECT name FROM employees WHERE department = 'Sales'
UNION
SELECT name FROM contractors WHERE project = 'Project A';
- 从
employees
表中获取所有在 "Sales" 部门工作的员工姓名, - 从
contractors
表中获取所有参与 "Project A" 项目的承包商姓名, - 最后,将这两个结果集合并成一个结果集,并去除重复项。
UNION ALL
UNION 默认去重,而 UNION ALL 则保留重复项。
mysql
SELECT name FROM employees WHERE department = 'Sales'
UNION ALL
SELECT name FROM contractors WHERE project = 'Project A';
- 从
employees
表中获取所有在 "Sales" 部门工作的员工姓名,以及 - 从
contractors
表中获取所有参与 "Project A" 项目的承包商姓名, - 最后,将这两个结果集合并成一个结果集,并保留重复项(如果存在)。
CASE 语句
mysql
SELECT name,
CASE
WHEN salary > 70000 THEN 'High'
WHEN salary BETWEEN 50000 AND 70000 THEN 'Medium'
ELSE 'Low'
END AS salary_category
FROM employees;
- 从
employees
表中获取所有员工的姓名和对应的薪资类别。 - 根据每位员工的薪资,将其分为三类:高、中或低。
GROUP BY 与 HAVING
GROUP BY 用于对结果进行分组,HAVING 用于过滤分组后的结果集
mysql
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING employee_count > 10;
- 从一个名为
employees
的数据库表中统计每个部门的员工数量,并筛选出员工数量超过10人的部门