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必须和比较运算符结合使用,不能单独使用