相关子查询与非相关查询

相关子查询与非相关查询

ID:38809546

大小:22.89 KB

页数:7页

时间:2019-06-19

相关子查询与非相关查询_第1页
相关子查询与非相关查询_第2页
相关子查询与非相关查询_第3页
相关子查询与非相关查询_第4页
相关子查询与非相关查询_第5页
资源描述:

《相关子查询与非相关查询》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、相关子查询与非相关子查询1:标量子查询(相对于多值子查询):只有标量子查询返回的是单个记录或者不返回,就是有效的子查询。Ex1:selectOrderIdFromOrderswhereEmployeeId=(selectEmployeeIdFromemployeeswherelastNamelikeN'Davolio')将’Davolio’改为'D%'时,这个时候子查询中返回结果为2行,等号右边此时为多值,查询失败.将’=’改为in谓词.查询才能通过.employees表中无lastname=’jason’,外部查询将返回null. 2:非相关子查询(嵌套子查

2、询) 一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。子查询中不能有orderby分组语句。先处理子查询,再处理父查询。细分如下:1。简单嵌套查询    查询选修课程号为'101'并且成绩高于学生号为'9501101'的所有学生的成绩.select*fromsclasswherecno='101'anddegree>=(selectdegree

3、fromsclasswheresno='9501101'andcno='101')  当子查询跟随在=、!=、<、<=、>、>=之后,子查询的返回值只能是一个,否则应在外层where子句中用一个in限定符,即要返回多个值,要用in或者notin2。带[not]in的嵌套查询     只要主查询中列或运算式是在(不在)子查询所得结果列表中的话,则主查询的结果为我们要的数据    select sales_id,tot_amt    from sales     where sale _id  in(select sale_id from employee whe

4、re sex='F')wheresnonotin(Selectdistinctsnofromsclass)3。带exists的嵌套查询 子查询的结果至少存在一条数据时,则主查询的结果为我们要的数据。(exists)或自查询的结果找不到数据时,则主查询的结果为我们要的数据(not exists) 我们经常查询的两个表有多少重复的记录就用这个 以下范例让你找出滞销的产品,也就是尚未有任何销售记录的库存产品。此范例主要是查询以库文件中的每一条产品代码到销售明细表中去查询,如果查询不到任何一条,表示该产品未曾卖出任何一件。  select * from stock a

5、  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

6、all](子查询)   只要主查询中列或运算式与子查询所得结果中任一(any)或全部(all)数据符合比较条件的话则主查询的结果为我们要的数据  select sale_id,tot_amt    from sales     where tot_am

7、t>any(select tot_amt from sales where sale_id='e0013'and 'order_date='1996/11/10')       选出不同的人金额最高的订单    select *  from  sales a    where tomat=(select max(totmat) from sales  where name=a.name)  3:相关子查询(多值子查询)1>非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。2>相关子查询的执行依赖于外部查询的数据,外部查询执

8、行一行,子查询就执行一次。查询中再查询,通常是以一个查询作为条件来供另一个查询使用     例:有work表和部门表A:检索出在部门表中登记的所有部门的职工基本资料         select*fromworkwhere部门编号in[notin](select部门编号fromdbo.部门)B:检索出在work表中每一个部门的最高基本工资的职工资料          select*fromworkawhere基本工资=(selectmax(基本工资)fromworkbwherea.部门名称=b.部门名称)          说明:由外查询提供一个部门名称给内查

9、询,内查询利用这个部门名称找到该部门的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。