OR
OR 连接多个条件,任意一个条件满足就行。WHERE A OR B 的结果集是条件 A 和条件 B 的并集,通常比单条件更大。OR 会让查询范围变宽,在组合条件时要特别警惕——一不小心就拉出了比预期多得多的数据。
OR 的性能通常不如 AND。对于单个索引列,AND 可以连续缩小范围,OR 则需要扫描多个不连续的范围。OR 和 IN 在逻辑上可以互相转换:WHERE dept_code = 2 OR dept_code = 3 OR dept_code = 4 等价于 WHERE dept_code IN (2, 3, 4)——后者更简洁,推荐使用。
以飞翔科技为例:
-- 查技术部或产品部的员工
SELECT emp_name, dept_code
FROM employees
WHERE dept_code = 2 OR dept_code = 1;
-- 查工资等级为 A 或 B 的员工
SELECT emp_name, salary_grade, basic_salary
FROM employees
WHERE salary_grade = 'A' OR salary_grade = 'B';
-- 不同类型条件的 OR:2018年入职或工资超一万
SELECT emp_name, join_year, basic_salary
FROM employees
WHERE join_year = 2018 OR basic_salary > 10000;
第三个例子是两个毫不相干的条件用 OR 连接——这种场景不能用 IN 替代,只能用 OR。