sql中 in 、not in 、exists、not exists 用法和差别
% 的一类。
NOTIN:通过 NOTIN 关键字引入的子查询也返回一列零值或更多值。
以下查询查找没有出版过商业书籍的出版商的名称。
SELECT pub_name FROM publishers WHERE pub_id NOTIN (SELECT pub_id FROM titles WHERE type ='business')
使用 EXISTS 和 NOTEXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。
两个集合的交集包含同时属于两个原集合的所有元素。
差集包含只属于两个集合中的第一个集合的元素。
EXISTS:指定一个子查询,检测行的存在。
本示例所示查询查找由位于以字母 B 开头的城市中的任一出版商出版的书名:
SELECTDISTINCT pub_name FROM publishers WHEREEXISTS (SELECT*FROM titles WHERE pub_id = publishers.pub_id AND type =
'business')
SELECTdistinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_id FROM titles WHERE type ='business')
两者的区别:
EXISTS:后面可以是整句的查询语句如:SELECT*FROM titles
IN:后面只能是对单列:SELECT pub_id FROM titles
NOTEXISTS:
例如,要查找不出版商业书籍的出版商的名称:
SELECT pub_name FROM publishers WHERENOTEXISTS (SELECT*FROM titles WHERE pub_id = publishers.pub_id AND type =
'business')
下面的查询查找已经不销售的书的名称:
SELECT title FROM titles WHERENOTEXISTS (SELECT title_id FROM sales WHERE title_id = titles.title_id)
语法
EXISTS subquery
参数
subquery:是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 SELECT 中有关子查询的讨论。
结果类型:Boolean
结果值:如果子查询包含行,则返回 TRUE。
示例
A. 在子查询中使用 NULL 仍然返回结果集
这个例子在子查询中指定 NULL,并返回结果集,通过使用 EXISTS 仍取值为 TRUE。
USE Northwind
GO
SELECT CategoryName
FROM Categories
WHEREEXISTS (SELECTNULL)
ORDERBY CategoryName ASC
GO
B. 比较使用 EXISTS 和 IN 的查询
这个例子比较了两个语义类似的查询。第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。
USE pubs
GO
SELECTDISTINCT pub_name
FROM publishers
WHEREEXISTS
(SELECT*
FROM titles
WHERE pub_id = publishers.pub_id
AND type = /'business/')
GO
-- Or, using the IN clause:
USE pubs
GO
SELECTdistinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = /'business/')
GO
下面是任一查询的结果集:
pub_name
----------------------------------------
Algodata Infosystems
New Moon Books
C.比较使用 EXISTS 和 =ANY 的查询
本示例显示查找与出版商住在同一城市中的作者的两种查询方法:第一种方法使用 =ANY,第二种方法使用 EXISTS。注意这两种方法返回相同的信息。
USE pubs
GO
SELECT au_lname, au_fname
FROM authors
WHEREexists
(SELECT*
FROM publishers
WHERE authors.city = publishers.city)
GO
-- Or, using = ANY
USE pubs
GO
SELECT au_lname, au_fname
FROM authors
WHERE city =ANY
(SELECT city
FROM publishers)
GO
D.比较使用 EXISTS 和 IN 的查询
本示例所示查询查找由位于以字母 B 开头的城市中的任一出版商出版的书名:
USE pubs
GO
SELECT title
FROM titles
WHEREEXISTS
(SELECT*
FROM publishers
WHERE pub_id = titles.pub_id
AND city LIKE /'B%/')
GO
-- Or, using IN:
USE pubs
GO
SELECT title
FROM titles
WHERE pub_id IN
(SELECT pub_id
FROM publishers
WHERE city LIKE /'B%/')
GO
E. 使用 NOTEXISTS
NOTEXISTS 的作用与 EXISTS 正相反。如果子查询没有返回行,则满足 NOTEXISTS 中的 WHERE 子句。本示例查找不出版商业书籍的出版商的名称:
USE pubs
GO
SELECT pub_name
FROM publishers
WHERENOTEXISTS
(SELECT*
FROM titles
WHERE pub_id = publishers.pub_id
AND type = /'business/')
ORDERBY pub_name
GO
sql中 in 、not in 、exists、not exists 用法和差别的更多相关文章
- 转【】浅谈sql中的in与not in,exists与not exists的区别_
浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...
- 浅谈sql中的in与not in,exists与not exists的区别
转 浅谈sql中的in与not in,exists与not exists的区别 12月12日北京OSC源创会 —— 开源技术的年终盛典 » sql exists in 1.in和exists ...
- (转)sql中 in 、not in 、exists、not exists 用法和差别
exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表A ID NAME 1 A1 2 A2 3 A3 表B ID AI ...
- 浅谈sql中的in与not in,exists与not exists的区别以及性能分析
1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...
- sql中 in 、not in 、exists、not exists 使用方法和区别
% 的一类. NOT IN:通过 NOT IN keyword引入的子查询也返回一列零值或很多其它值. 以下查询查找没有出版过商业书籍的出版商的名称. SELECT pub_name FROM pub ...
- sql中的in与not in,exists与not exists的区别
1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...
- 关于sql中in 和 exists 的效率问题,in真的效率低吗
原文: http://www.cnblogs.com/AdamLee/p/5054674.html 在网上看到很多关于sql中使用in效率低的问题,于是自己做了测试来验证是否是众人说的那样. 群众: ...
- SQL中exists、not exists以及in、not in的区别和使用
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如: select name from student where sex = 'm' and mark exists(selec ...
- SQL中EXISTS的用法
比如在Northwind数据库中有一个查询为SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID FR ...
随机推荐
- 代码: js日期
日期格式化 (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2015-11-16 08:09:04.423 (new Dat ...
- OpenACC 梯度下降法求解线性方程的优化
▶ 书上第二章,用一系列步骤优化梯度下降法解线性方程组.才发现 PGI community 编译器不支持 Windows 下的 C++ 编译(有 pgCC 命令但是不支持 .cpp 文件,要专业版才支 ...
- 用yield 实现协程 (包子模型)
协程是一种轻量级的线程 无需线程上下级的开销, 所有的协程都在一个线程内执行 import time def consumer(name): print('%s is start to eat bao ...
- js--语音播报
一.借用百度接口 function speckText(){ var str = "请及时预警!"; //var request= new URLRequest(); var ur ...
- eclipse从svn导入maven项目变成普通项目解决办法
右击项目-->configure-->Convert to Maven Project
- vue -本地服务配置
1.httpd.conf # # This is the main Apache HTTP server configuration file. It contains the # configura ...
- Mybatis知识(3)
1.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的? ① 数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMapConfig ...
- 编写jQuery插件(三)——三个插件例子
封装jQuery对象方法的插件 表格隔行变色插件 CSS部分: .even{ background:#CCC; } .odd{ background:#666; } .selected{ backgr ...
- Linux逻辑卷的拉伸和缩小
相对于普通磁盘优势是逻辑卷可以在线动态的拉伸(不用先unmount操作),只要vg中有足够的空间即可 1:首先查看vg是否有足够的空间 [root@gechong mapper]# vgdisplay ...
- unity 加载读取外部XML
cfg.xml <rootNode> <category name="网站"> <item name="mainPage"> ...