来看下面这样一条SQL语句:
select * from student where 20 < all (select score from student)
其中,(select score from student)返回的是所有分数的记录集
只有当记录集中的所有分数都大于20后,才会执行前面的SQL语句。显然,任何一条记录都大于20.
如果把它改成50,则查不到任何数据,因为只要有一条记录小于50,条件都不成立。
但是,如果把all改面any就不一样了:
select * from student where 50 < any (select score from student)
它的意思是,只要记录集中的记录有一条大于50,条件就成立。
3 IN 与 = ANY 等价,均表示,变量在(子查询)列表之中,即 a IN (table B) 表示 a = ANY B.b
4 NOT IN 与 <> ALL 等价,而不等于<> ANY,前两者均表示,变量不在(子查询)列表之中,即 a NOT IN (table B) 表示 a <> ALL B.b。而如果a <> ANY B.b,则只要任意一个b<>a就true了。
5 IN 与 EXISTS 的性能区别主要来自,IN 会编列子查询的每行记录,然后再返回,而EXISTS 则只要遇到第一个满足条件的记录就马上返回。
6 NOT IN 与 NOT EXISTS 并不能完全等价,只有当子查询中,select 关键字后的字段有not null约束或者有这种暗示时才用NOT IN。
http://blog.163.com/tgaosh@126/blog/static/13981862420105411342281/
select * from userinfo where userid not in(select distinct a_userid form table1);
突然碰到not in 关键字失效,在数据库中查询后才发现 table1中的a_userid存在NULL值,而not in 关键字则需要a_userid有not null约束