SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别
来源:互联网 发布:网络炒股 编辑:程序博客网 时间:2024/06/03 20:38
IN:确定给定的值是否与子查询或列表中的值相匹配。
IN 关键字使您得以选择与列表中的任意一个值匹配的行。当要获得居住在 California、Indiana 或 Maryland 州的所有作者的姓名和州的列表时,就需要下列查询:
SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERE CategoryID = 1 OR CategoryID = 4 OR CategoryID = 5
然而,如果使用 IN,少键入一些字符也可以得到同样的结果:
SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERE CategoryID IN (1, 4, 5)
IN 关键字之后的项目必须用逗号隔开,并且括在括号中。 下列查询在 titleauthor 表中查找在任一种书中得到的版税少于50% 的所有作者的 au_id,然后从 authors 表中选择 au_id 与 titleauthor 查询结果匹配的所有作者的姓名:
SELECT au_lname, au_fname FROM authors WHERE au_id IN (SELECT au_id FROM titleauthor WHERE royaltyper <50)
以下查询查找没有出版过商业书籍的出版商的名称:
SELECT pub_name FROM publishers WHERE pub_id NOT IN (SELECT pub_id FROM titles WHERE type = 'business')
使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。 两个集合的交集包含同时属于两个原集合的所有元素。 差集包含只属于两个集合中的第一个集合的元素。EXISTS:指定一个子查询,检测行的存在。
查找出版商业书籍的出版商的名称:
SELECT DISTINCT pub_name FROM publishers WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')
SELECT distinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_id FROM titles WHERE type = 'business')
两者的区别:
EXISTS:后面可以是整句的查询语句如:SELECT*FROM titles
IN:后面只能是对单列:SELECT pub_idFROM titles
NOT EXISTS:
例如,要查找不出版商业书籍的出版商的名称:
SELECT pub_name FROM publishers WHERE NOT EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')
下面的查询查找已经不销售的书的名称:
SELECT title FROM titles WHERE NOT EXISTS (SELECT title_id FROM sales WHERE title_id = titles.title_id)
0 0
- Strtus2再爆漏洞,以及修复方法
- oracle设置数据库编码
- wordpress连接数据库出错解决方法
- Java学习之Iterator(迭代器)的一般用法
- 使用vs2010编写c++Win32 Console Project时会出“error LNK1123” 错误解决方法
- SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别
- deque双向队列
- ActiveRecord::RecordInvalid (translation missing: zh, activerecord, errors, messages, record_invalid
- 安卓一个Activity里面写好内容跳到另外一个Activity选择文件之后回来,其他内容消失解决办法
- jquery+ajax 的 data参数设置的内容,如何在HttpHandler的HttpContext中取得(包括post方式和get方式)
- jquery 回车触发按钮点击事件
- 【无事水一发】ExtJS4 Ext.tree.Panel (无限层级)带复选框树勾选(父级子级)联动代码
- 联想网络同传的工作日志
- oracle创建用户