MySQL数据库 in、all、any、some的区别
理解 in\all\any\some
- in:范围内存在,就返回true。
-
in(a,b,c)
可以理解成 a or b or c
。
- 也可以这么理解:
in
的作用与 =any
的作用相同
-
all
:所有,必须和子查询返回的结果完全一致,才会返回true
- 用法:
ALL(select column from table [where 条件])
- all中的子查询结果可以理解成
...and...and...and...
- 如果括号中的结果是空表,则结果都为true
- 如果子查询中有null值,那么最终结果都是null
-
any
:任一,与子查询返回的结果中任一一个结果相同,就返回true。
- 用法:
any(select column from table [where 条件])
- 子查询的结果可以理解成
...or...or...
- 如果子查询存在空表或null的情况, 那么结果都是null
- some: 是any的别名,不常用
all\any\的使用
# in
SELECT * FROM score WHERE degree IN(86,88,90);
# all
SELECT * FROM score WHERE degree > ALL(86,88,90); #错误语句
SELECT * FROM score WHERE degree > ALL(SELECT degree FROM score WHERE degree BETWEEN 70 AND 90);
# any
SELECT * FROM score WHERE degree > ANY(86,88,90); # 错误语句
SELECT * FROM score WHERE degree = ANY(SELECT degree FROM score WHERE degree BETWEEN 70 AND 90);
SELECT * FROM score WHERE degree >= ANY(SELECT degree FROM score WHERE degree BETWEEN 70 AND 90);
- 从上边的语句可以看出,in中可以直接写数值,但是all和any不能直接写数值
- all和any语句中要放入查询一个列的子查询语句,子查询语句的类型要和作比较的条件类型一致
- all、any、some必须和比较运算符结合使用,不能单独使用