some,any,in,all 之间的区别

想要在集合里做比较的判断,解决全班最高分,全公司最低工资的问题,那么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

 

posted @ 2015-12-26 15:55  lawrence.li  阅读(823)  评论(0编辑  收藏  举报