sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效

来看下面这样一条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,条件就成立。

1
ALL与ANY的关系就是,AND 与 OR 的关系。

2 ANY与SOME等价,据说搞这两个不同的词出来是为了迁就英语语法。例如,在用= ANY 的地方在(英语) 语法上就应该是= SOME。 some是新版本的SQL中取代any的关键字,用法基本一样。

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约束

你可能感兴趣的:(sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效)