ANY
ANY 配合比较运算符和子查询使用,表示"比子查询结果中的任意一个值(大/小/等)"。basic_salary > ANY (SELECT ...) 的意思是"只要比子查询结果里至少一个值大就行"——比最低工资高就算满足。
ANY 等价于先取极值再比较:> ANY (...) 等价于 > MIN(...),< ANY (...) 等价于 < MAX(...),= ANY (...) 完全等价于 IN (...)。SQL 的 SOME 是 ANY 的同义词,关键字不同行为一样。
以飞翔科技为例:
-- 工资至少高于一名产品部员工的员工
SELECT emp_name, basic_salary
FROM employees
WHERE basic_salary > ANY (
SELECT basic_salary FROM employees
WHERE dept_code = 1
);
-- 等价于
SELECT emp_name, basic_salary
FROM employees
WHERE basic_salary > (
SELECT MIN(basic_salary) FROM employees
WHERE dept_code = 1
);
-- 商品价格等于飞翔小店或飞翔旗舰店任一商品的价格
SELECT product_name, price, shop_name
FROM products
WHERE price = ANY (
SELECT price FROM products
WHERE shop_name IN ('飞翔小店', '飞翔旗舰店')
);
-- 等价 IN 写法
SELECT product_name, price, shop_name
FROM products
WHERE price IN (
SELECT price FROM products
WHERE shop_name IN ('飞翔小店', '飞翔旗舰店')
);
最后两例展示了 = ANY 和 IN 的等价关系——日常写 IN 就行,= ANY 可以作为理解它的补充。