欢迎来到天天文库
浏览记录
ID:34726089
大小:50.70 KB
页数:3页
时间:2019-03-10
《sql中innotin及existsnotexists的用法和差别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、SQL中IN,NOTIN及EXISTS,NOTEXISTS的用法和差别 [一]IN:确定给定的值是否与子查询或列表中的值相匹配。IN关键字使您得以选择与列表中的任意一个值匹配的行。当要获得居住在California、Indiana或Maryland州的所有作者的姓名和州的列表时,就需要下列查询:SELECTProductID,ProductNameFROMNorthwind.dbo.ProductsWHERECategoryID=1ORCategoryID=4ORCategoryID=5然而,如果使用IN,少键入一些字符也可以得到同样的结果:SELECTProductID,Product
2、NameFROMNorthwind.dbo.ProductsWHERECategoryIDIN(1,4,5)IN关键字之后的项目必须用逗号隔开,并且括在括号中。下列查询在titleauthor表中查找在任一种书中得到的版税少于50%的所有作者的au_id,然后从authors表中选择au_id与titleauthor查询结果匹配的所有作者的姓名:SELECTau_lname,au_fnameFROMauthorsWHEREau_idIN(SELECTau_idFROMtitleauthorWHEREroyaltyper<50)结果显示有一些作者属于少于50%的一类。[二]NOTIN:通过N
3、OTIN关键字引入的子查询也返回一列零值或更多值。以下查询查找没有出版过商业书籍的出版商的名称。SELECTpub_nameFROMpublishersWHEREpub_idNOTIN(SELECTpub_idFROMtitlesWHEREtype='business')使用EXISTS和NOTEXISTS引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。差集包含只属于两个集合中的第一个集合的元素。[三]EXISTS:指定一个子查询,检测行的存在。本示例所示查询查找由位于以字母B开头的城市中的任一出版商出版的书名:SELECTDISTINCT
4、pub_nameFROMpublishersWHEREEXISTS(SELECT*FROMtitlesWHEREpub_id=publishers.pub_idANDtype='business')SELECTdistinctpub_nameFROMpublishersWHEREpub_idIN(SELECTpub_idFROMtitlesWHEREtype='business')两者的区别:EXISTS:后面可以是整句的查询语句如:SELECT*FROMtitlesIN:后面只能是对单列:SELECTpub_idFROMtitles[四]NOTEXISTS:例如,要查找不出版商业书籍的出
5、版商的名称:SELECTpub_nameFROMpublishersWHERENOTEXISTS(SELECT*FROMtitlesWHEREpub_id=publishers.pub_idANDtype='business')下面的查询查找已经不销售的书的名称:SELECTtitleFROMtitlesWHERENOTEXISTS(SELECTtitle_idFROMsalesWHEREtitle_id=titles.title_id)附:我自己写的时候in的语句查询数据量越过1000行时,报错说toomanyvalues,也就是说in与notin最大的数据容量是1000,有兴趣的朋友可
6、以试下!in不行的时候最好用exists.自己的实用的一个例子,一个消费表中,要查询当前月的用户不在前当年前几个月中存在,也就是说净增长多少个消费。SQL如下:selectcont(t.customerid),count(distinctt.customerid)fromconsumelogtwheret.largessid=优惠ID(与业务相关)andt.storetime>date'2009-09-01'andt.storetime7、关)ands.customerid=t.customeridands.storetime>date'2009-01-01'ands.storetime
7、关)ands.customerid=t.customeridands.storetime>date'2009-01-01'ands.storetime
此文档下载收益归作者所有