IN
IN 判断某个值是否在一个集合里,比用一长串 OR 优雅得多。WHERE dept_code IN (2, 1, 3) 等价于 WHERE dept_code = 2 OR dept_code = 1 OR dept_code = 3,但 IN 更短、更清晰、更不易写错。
集合可以是数字、字符串组成的列表,也可以是一个子查询的结果。子查询版 IN 能力更强:WHERE emp_id IN (SELECT emp_id FROM ...)。IN 不能匹配 NULL——集合里写了 NULL 会被忽略,不会匹配到 NULL 值。
以飞翔科技为例:
-- 查指定几个部门的员工
SELECT emp_name, dept_code
FROM employees
WHERE dept_code IN (1, 2, 3);
-- 查几个特定工资等级的员工
SELECT emp_name, salary_grade, basic_salary
FROM employees
WHERE salary_grade IN ('A', 'B', 'C');
-- 查在飞翔小店或飞翔旗舰店的商品
SELECT product_name, shop_name, price
FROM products
WHERE shop_name IN ('飞翔小店', '飞翔旗舰店');
-- 子查询:查工资高于所有部门平均工资的员工
SELECT emp_name, basic_salary
FROM employees
WHERE basic_salary > ALL (
SELECT AVG(basic_salary) FROM employees GROUP BY dept_code
);
前三个是 IN 的常规用法。第四个结合了 ALL 和子查询,意思是"工资比每一个部门的平均工资都高"——展示了 IN 体系的扩展能力。