相关子查询与非相关查询.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
相关子查询与非相关查询

相关子查询与非相关子查询1:标量子查询(相对于多值子查询):只有标量子查询返回的是单个记录或者不返回,就是有效的子查询。Ex1:selectOrderIdFrom Orders whereEmployeeId=(selectEmployeeIdFrom employees wherelastNamelikeNDavolio)将’Davolio’改为D%时,这个时候子查询中返回结果为2行,等号右边此时为多值,查询失败.将’=’改为in谓词.查询才能通过.employees表中无lastname=’jason’,外部查询将返回null.?2:非相关子查询(嵌套子查询)?一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。子查询中不能有order by分组语句。先处理子查询,再处理父查询。细分如下:1。简单嵌套查询???? 查询选修课程号为101并且成绩高于学生号为9501101的所有学生的成绩.select * from sclasswhere cno=101 and degree=(select degree from sclass where sno=9501101and cno=101)??当子查询跟随在 =、!=、、=、、= 之后,子查询的返回值只能是一个, 否则应在外层where子句中用一个in限定符,即要返回多个值,要用in或者not in2。带[not] in的嵌套查询???? ?只要主查询中列或运算式是在(不在)子查询所得结果列表中的话,则主查询的结果为我们要的数据????select?sales_id,tot_amt????from?sales?????where?sale?_id??in(select?sale_id?from?employee?where?sex=F)where sno not in(Select distinct sno from sclass)3。带exists的嵌套查询?子查询的结果至少存在一条数据时,则主查询的结果为我们要的数据。(exists)或自查询的结果找不到数据时,则主查询的结果为我们要的数据(not?exists)?我们经常查询的两个表有多少重复的记录就用这个?以下范例让你找出滞销的产品,也就是尚未有任何销售记录的库存产品。此范例主要是查询以库文件中的每一条产品代码到销售明细表中去查询,如果查询不到任何一条,表示该产品未曾卖出任何一件。??select?*?from?stock?a??where?not?exists(select?*?from?sale_item?b??????????????????????????where?a.prod_id=b.prod_id?and?a.stup_id=b.stup_id)?4.select?...?where?列或运算式?比较运算运算【any|all](子查询)???只要主查询中列或运算式与子查询所得结果中任一(any)或全部(all)数据符合比较条件的话则主查询的结果为我们要的数据??select?sale_id,tot_amt????from?sales?????where?tot_amtany(select?tot_amt?from?sales?where?sale_id=e0013and?order_date=1996/11/10)???????选出不同的人金额最高的订单????select?*??from??sales?a????where?tomat=(select?max(totmat)?from?sales??where?name=a.name)??3:相关子查询(多值子查询)1非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。2相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。查询中再查询,通常是以一个查询作为条件来供另一个查询使用????? 例:有work表和部门表A:检索出在部门表中登记的所有部门的职工基本资料?????????select * from work where 部门编号 in [not in](select 部门编号 from dbo.部门)B:检索出在work表中每一个部门的最高基本工资的职工资料?????????? select * from work a where 基本工资=(select max(基本工资) from work b where a.部门名称=b.部门名称) ?????????? 说明:由外查询提

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档