想要在集合里做比较的判断,解决全班最高分,全公司最低工资的问题,那么SQL需要有key word来表示两个东西
1.集合里的某一个元素——ANY,SOME
2.集合里的所有元素——ALL
最开始,SQL标准规定,ANY表示一个集合的某一个元素,班里的某一位同学,马路上的某一辆车,举例子,有一个集合Set(1,2,3,4,5,6),any(select * from Set) 可以表示单独一个1,也可以表示单独一个2
但是英文中的ANY并不是指“某一个”,而是指“任意的“,”全部的“,举例子,Anybody can be a hero 意思是”任何一个人,所有的人都能成为英雄“,这里的any和all是同等意思的,”all the people can be heros“,并不是SQL标准指的”某一个“
为了解决这个问题,SQL新的标准添加了一个key word 叫 some 来表达 any的意思,somebody 某人,something某物,所以some和any在SQL里面是同一个意思
解决问题:想要找出集合set1有哪些元素,大于集合set2中的某一个元素的?
select * from set1 where number > some(select * from set2);
select * from set1 where number > any(select * from set2);
上面两条语句都是等效的,结果是3,4 (因为3和4都大于set2中的2)
解决问题:如果我想要找set1中有哪些元素,刚好等于集合set2中的元素呢 ?
1.select * from set1 where number = some(select * from set2);
2.select * from set1 where number = any(select * from set2);
3.select * from set1 where number in (select * from set2);
以上三条语句都是等效的——结果是2,some,any,in的关系如下,some是any的别名,in是= any的别名,详细阅读参考:Subqueries with ANY, IN, or SOME
而SQL的关键词ALL跟英文的ALL是一致的,就是所有的意思,ALL这个关键词,封装了两个操作
1.给一堆元素排序
2.取得排序元素的首位元素(也就是最大值max和最小值min)
当我们希望某一个数,能够大于集合(3,2,1,4,6,5)中的ALL元素
1.排序 1,2,3,4,5,6
2.求最大值6
意思就是,希望某一个元素能够大于6