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约束
2016攒课第二期之你听课我买单,快来攒你想听的课!
架构免费公开课报名
【UDN沙龙】Intel大拿分享HTML5时代的跨平台开发解
关闭
sql语句中的 in 、not in 、exists、not exists 详细用法说明和差别----not in失效
2013-03-08 14:2010054人阅读 评论(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约束
相关文章推荐
- MySQL免安装版下载与配置
- tomcat配置tomcat-redis-session-manager
- ORACLE的statistics_level的三种状态以及oracle自动诊断工具ADDM
- 提升数据库查询效率小结
- SQL防漏洞注入攻击小结
- Hadoop Sqoop;从HDFS导入数据到MYSQL数据库中出现中文字符乱码
- 批量更新
- redis的安装
- NVL
- jdbc防止sql注入方法总结
- MySQL查询order by相减select相减的Sql语句
- Oracle:查看对象有没有被其他对象引用语句
- win7安装mysql后,重装系统后,mysql启动
- SQL语句性能优化
- mysql的卸载与安装
- Mysql 免安装版配置
- Centos 6.5 安装oracle
- TP下的session.memcache
- 各种nosql数据库的比较Cassandra,MongoDB,CouchDB,Redis,Riak,HBase
- MySQL 数据导入,导出