资源描述:
《sql中innotinexistsnotexists的用法和差别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、sql中in、notin、exists、notexists用法和差别exists(sql返回结果集为真)notexists(sql不返回结果集为真)如下:表AIDNAME1 A12 A23 A3表BIDAIDNAME1 1B12 2B23 2B3表A和表B是1对多的关系A.ID=>B.AIDSELECTID,NAMEFROMAWHEREEXIST(SELECT*FROMBWHEREA.ID=B.AID)执行结果为1A12A2原因可以按照如下分析SELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROM
2、BWHEREB.AID=1)--->SELECT*FROMBWHEREB.AID=1有值返回真所以有数据SELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROMBWHEREB.AID=2)--->SELECT*FROMBWHEREB.AID=2有值返回真所以有数据SELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROMBWHEREB.AID=3)--->SELECT*FROMBWHEREB.AID=3无值返回真所以没有数据NOTEXISTS就是反过来SELECTID,NAMEFROMA
3、WHERE NOTEXIST(SELECT*FROMBWHEREA.ID=B.AID)执行结果为3A3===========================================================================EXISTS=IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因SELECTID,NAMEFROMA WHERE IDIN(SELECTAIDFROMB)NOTEXISTS=NOTIN,意思相同不过语法上有点点区别SELECTID,NAMEFROMAWHE
4、RE ID NOTIN(SELECTAIDFROMB)下面是普通的用法:SQL中IN,NOTIN,EXISTS,NOTEXISTS的用法和差别: IN:确定给定的值是否与子查询或列表中的值相匹配。 IN关键字使您得以选择与列表中的任意一个值匹配的行。 当要获得居住在California、Indiana或Maryland州的所有作者的姓名和州的列表时,就需要下列查询: SELECTProductID,ProductNameFROMNorthwind.dbo.ProductsWHERECategoryID=1ORCategoryID
5、=4ORCategoryID=5 然而,如果使用IN,少键入一些字符也可以得到同样的结果: SELECTProductID,ProductNameFROMNorthwind.dbo.ProductsWHERECategoryIDIN(1,4,5) IN关键字之后的项目必须用逗号隔开,并且括在括号中。 下列查询在titleauthor表中查找在任一种书中得到的版税少于50%的所有作者的au_id,然后从authors表中选择au_id与 titleauthor查询结果匹配的所有作者的姓名: SELECTau_lname,au_
6、fnameFROMauthorsWHEREau_idIN(SELECTau_idFROMtitleauthorWHEREroyaltyper<50) 结果显示有一些作者属于少于50%的一类。 NOTIN:通过NOTIN关键字引入的子查询也返回一列零值或更多值。 以下查询查找没有出版过商业书籍的出版商的名称。 SELECTpub_nameFROMpublishersWHEREpub_idNOTIN(SELECTpub_idFROMtitlesWHEREtype='business') 使用EXISTS和NOTEXISTS引入的子
7、查询可用于两种集合原理的操作:交集与差集。 两个集合的交集包含同时属于两个原集合的所有元素。 差集包含只属于两个集合中的第一个集合的元素。 EXISTS:指定一个子查询,检测行的存在。 本示例所示查询查找由位于以字母B开头的城市中的任一出版商出版的书名: SELECTDISTINCTpub_nameFROMpublishersWHEREEXISTS(SELECT*FROMtitlesWHEREpub_id=publishers.pub_idANDtype= 'business') SELECTdistinctpub_n
8、ameFROMpublishersWHEREpub_idIN(SELECTpub_idFROMtitlesWHEREtype='business') 两者的区别: EXISTS:后面可以是整句的查询语句