ANY、ALL 和 SOME

作者:vkvi 来源:ITPOW(原创) 日期:2007-5-24

ANY、ALL 和 SOME 是 SQL 中的关键字,用它们可以修改引入子查询的比较运算符,在 SQL-92 标准里面,SOME 和 ANY 是等效的,所以我们只讨论 ANY 和 ALL。

说明:往往可以通过修改 SQL 语句,从而不使用 ANY、ALL 也可以实现相同的效果。

顾名思义,ANY 表示任意,ALL 表示所有。举例说明:>ANY (1,2,3),表示大于 1,2,3 中的任意一个数就满足条件,也就是说大于 1 便可以了;>ALL (1,2,3),表示大于 1,2,3 中的所有数才满足条件,也就是说大于 3 才可以。

 

=ANY 等价于 IN

where id=ANY (select sid from students)

等价于

where id in (select sid from students)

 

<>ANY 不表示 NOT IN

这个不好理解,举个例子。

宠物表
一字段:宠物名称。
两条记录:猫;狗。
养宠物表
两个字段:主人 宠物名称。
四条记录:张三 猫;张三 狗;李四 猫;王五 鸟。

说明:以上并不是一个好的数据库设计,这里只是为了说明 =ANY 和 NOT IN。

select * from 养宠物表 where 宠物名称 <>ANY (select 宠物名称 from 宠物表)

这会把所有记录显示出来,<>ANY (a,b,c) 表示不等于 a,或不等于 b,或不等于 c,由逻辑运算我们知道,这种情况总是存在的。

select * from 养宠物表 where 宠物名称 NOT IN (select 宠物名称 from 宠物表)

这会把“王五 鸟”这条记录显示出来,因为只有王五养的宠物在宠物表中不存在。NOT IN (a,b,c) 表示既不等于 a,也不等于 b,也不等于 c。

 

<>ALL 等价于 NOT IN

相关文章