@[TOC](列子查询(row subquery)中的IN、ANY、SOME、ALL的理解)
IN、ALL、ANY、SOME的解释
- IN:在范围内的值,只要有就true
- ALL: 与子查询返回的所有值比较为true 则返回true
- ANY:与子查询返回的任何值比较为true 则返回true
- SOME:是ANY的别称,很少用
注意:
ALL、ANY、SOME的使用 必须 要用到比较操作符
/*
举个例子: 表1(table1)中 列r1有 1 2 8
表2(table2)中 列r2有 2 3
*/
-- 用IN举例子 返回的结果是 2
SELECT r2
FROM table2
WHERE r2 IN (SELECT r1
FROM table1
);
-- ALL 例子 没有返回结果 因为 2 3没有都大于或等于 1 2 8 所有的数值
-- 也就是 子查询中的所有值都成立 则成立
SELECT r2
FROM table2
WHERE r2 >= ALL(SELECT r1
FROM table1
);
--ANY例子 返回结果是2 3 只要子查询中返回的值 有一个成立 则成立
SELECT r2
FROM table2
WHERE r2 >= ANY(SELECT r1
FROM table1
);
ALL、ANY操作符的特殊情况
-
ALL的特殊情况
- 如果table1为空表 则都为TRUE
- 与如果子查询中有NULL 最终父查询返回结果都是NULL
-
ANY的特殊情况
空表和NULL的结果都是NULL