您的位置:首页 > 数据库

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

2016-04-15 11:16 260 查看

2016攒课第二期之你听课我买单,快来攒你想听的课!
架构免费公开课报名
【UDN沙龙】Intel大拿分享HTML5时代的跨平台开发解

关闭

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

2013-03-08 14:20
10054人阅读 评论(0)
收藏
举报

本文章已收录于:

来看下面这样一条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约束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: