1.概念认知
in: 等于列表中的任何一个值。
any: 比较子查询返回的每个值的值,可以与=、>、>=、结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的任何一个数据。有任何一个满足就返回true。
all:比较子查询返回的每个值的值,可以与=、>、>=、结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的所有数据。
注意:all比的是全部都满足才返回true,是比所有,也就是说全部数据中只要有一个不对就返回false,查询值为空。
some:是any的别名,不常用,早期的SQL仅仅允许使用【any】,后来的版本为了和英语的【any】相区分,引入了【some】,同时还保留了【any】关键词。
any 简单示例 (any是比较多个,比较符是比较单个):
SELECT *
FROM students
WHERE score > ANY (SELECT score FROM students WHERE class = 'A')
这个查询语句中,首先在子查询中筛选出班级为A的学生的所有成绩,然后与外部查询中的成绩值进行比较,如果外部查询中的成绩值大于子查询中的任意一个成绩,则返回该记录。因此,它们可以结合使用,但是它们代表的含义是不同的。
2.in和any
- 相同点:
in和any从SQL语句上看是没有什么不同的,查询的结果都是一样的。
- 不同点:
从查询的的逻辑顺序上看:
- in是比列表中的任意一个数据,列表是一个整体,直接拿整体比较。
- any是和查询的每一个返回值做对比,一条一条的逐一对比、而且前面还必须要带操作符。
3.整体不同
- in中可以直接写数值,但是all和any不能直接写数值
- all和any语句中要放入查询一个列的子查询语句,子查询语句的类型要和作比较的条件类型一致
- all、any、some必须和比较运算符结合使用,不能单独使用