子查询:嵌套在其他查询中的查询。

子查询有称内部查询,而包含子查询的语句称之为外部查询

所有的子查询可以分两类,既 相关子查询和非相关子查询

1》非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询

2》相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。

故非相关子查询比相关子查询效率高

非相关子查:

  1. select t1.ename,t1.job,t1.sal from emp t1
  2. where t1.sal > (
  3. select avg(t2.sal) from emp t2 --子查询是一个独立的查询
  4. );
  5. ENAME      JOB             SAL
  6. ---------- --------- ---------
  7. JONES      MANAGER     2975.00
  8. BLAKE      MANAGER     2850.00
  9. CLARK      MANAGER     2450.00
  10. SCOTT      ANALYST     3000.00
  11. KING       PRESIDENT   5000.00
  12. FORD       ANALYST     3000.00

相关子查询:

  1. select t1.ename,t1.job,t1.sal from emp t1
  2. where t1.sal > (
  3. select avg(t2.sal) from emp t2
  4. where t2.deptno=t1.deptno  --依赖于外部查询结果
  5. );
  6. ENAME      JOB             SAL
  7. ---------- --------- ---------
  8. ALLEN      SALESMAN    1600.00
  9. JONES      MANAGER     2975.00
  10. BLAKE      MANAGER     2850.00
  11. SCOTT      ANALYST     3000.00
  12. KING       PRESIDENT   5000.00
  13. FORD       ANALYST     3000.00

相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。执行过程:

(1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。(元组:就是表中的一条数据)

(2)执行内层查询,得到子查询操作的值。

(3)外查询根据子查询返回的结果或结果集得到满足条件的行。

(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。

具体案例 说明:

--查询Booka表中大于该类图书价格平均值的图书信息


SElECT 图书名,出版社,类编号,价格
FROM Books As a
WHERE 价格 >
(
SELECT AVG(价格)
FROM Books AS b
WHERE a.类编号=b.类编号
)
GO

与前面介绍过的子查询不同,相关子查询无法独立于外部查询而得到解决。该子查询需要一个“类编号”的值。而这个值是个变量,随SQLSever检索Books表中的不同行而改变。下面详细说明该查询执行过程:

  先将Books表中的第一条记录的“类编号”的值“2”代入子查询中,子查询变为:

      SELECT AVG(价格)
          FROM Books AS b
         WHERE b.类编号=2

  子查询的结果为该类图书的平均价格,所以外部查询变为:

      SElECT 图书名,出版社,类编号,价格
         FROM Books As a
       WHERE 价格 > 34

如果WHERE条件为True,则第一条结果包括在结果集中,则否不包括。对Books表中的所有行运行相同的过程,最后形成的结果集及最后返回结果。

sql 相关子查询的更多相关文章

  1. SQL相关子查询是什么?和嵌套子查询有什么区别?

    目录 两者的各种叫法 相关子查询MySQL解释 相关子查询Wikipedia解释 相关子查询执行步骤拆解 相关子查询和嵌套查询的区别 参考资料 两者的各种叫法 相关子查询叫做:Correlated S ...

  2. [SQL SERVER系列]之嵌套子查询和相关子查询

    子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数:另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的 ...

  3. sql之独立子查询和相关子查询总结

    1.独立子查询:顾名思义:就是子查询和外层查询不存在任何联系,是独立于外层查询的: 下面就看一个例子: 有一张订单表 Sales.Order 和一张 客户表 Sales.Customer 下面的sql ...

  4. 相关子查询【SQL Server】

    查询book表中大于该类图书价格平均值的图书信息 先将第一条记录的类编号的值为2代入子查询中,子查询为 select avg(price) from book b where b.id=2 则得到类编 ...

  5. 相关子查询和嵌套子查询 [SQL Server]

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提,假设Books表如下: 类编号  图书名         出版社               价格-------------- ...

  6. SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...

  7. SQLServer学习笔记<>相关子查询及复杂查询

    二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,coun ...

  8. ylb:子查询(嵌套子查询)和子查询(相关子查询)

    ylbtech-SQL Server:SQL Server-子查询(嵌套子查询)和子查询(相关子查询) SQL Server 子查询(嵌套子查询)和子查询(相关子查询). 1,ylb:1,子查询(嵌套 ...

  9. T-SQL的进阶:超越基本级别3:构建相关子查询——701小组

    T-SQL的进阶:超越基本级别3:构建相关子查询 格雷戈里·拉森,2014/03/05 原文链接: http://www.sqlservercentral.com/articles/Stairway+ ...

随机推荐

  1. HGE引擎之hgeSprite

    一.hgeSprite类 hgeSprite是一个精灵实体的HGE帮助类. 1.构造函数 创建和初始化一个hgeSprite对象. hgeSprite(HTEXTURE tex, float x, f ...

  2. UIImageView(转)

    UIImageView,顾名思义,是用来放置图片的.使用Interface Builder设计界面时,当然可以直接将控件拖进去并设置相关属性,这就不说了,这里讲的是用代码. 1.创建一个UIImage ...

  3. 视频处理控件TVideoGrabber视频捕捉设设备相关问题

    选择一个视频捕捉设备 首先设置 VideoSource = vs_VideoCaptureDevice来选择一个视频捕捉设备作为一个视频源. 通过指定VideoDevice属性来选择当前的视频捕捉设备 ...

  4. linux 集群配置ssh无密码访问

    一.修改host文件 1) 用客户端工具(ssh client或者putty)连接到linux服务器.在root用户下输入命令 vi /etc/hosts,用vi编辑hosts文件,如下: #127. ...

  5. 虚拟机 本地 本机 双启动 运行 vhd local Dual Boot

    在使用虚拟机的过程中, 可能会遇到虚拟机的运行要求过高, 电脑力不从心的情况. 为了让虚拟机使用更多电脑资源, 可以让虚拟机以本地双系统的方式,访问本地计算机资源. 打开磁盘管理,在磁盘上右键,选择 ...

  6. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.3.创建控件

    像jQuery提供 fn.extend() 方法从而可以简单地创建插件一样,jQuery UI也提供了机制使得创造插件变得简单,也确保了公共API功能在新的插件中被保留. 1.首先,创建一个名为  j ...

  7. Nagios监控Oralce

    一.本文说明: 本文是监控本地的Oracle,其实监控远端的Oracle也是跟下面的步骤差不多的. 二.安装Nagios.Nagios插件.NRPE软件: 安装步骤可以参考<Linux下Nagi ...

  8. C#:序列化值与解码二进制

    1.将对象序列化为二进制值,供WebBrowser传值: private static byte[] PostDataToBytes(Data postData) { JavaScriptSerial ...

  9. 错误Mybatis 元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id*,result*,association*,collection*,discriminat

    今天算是见识了什么事顺序的重要性. 在使用mybatis时由于联合了其他的表,用到了resultMap,之后外加association这一项.可是在替换对应字段的位置上加上association总是报 ...

  10. 第十二届浙江省大学生程序设计大赛-Ace of Aces 分类: 比赛 2015-06-26 14:25 12人阅读 评论(0) 收藏

    Ace of Aces Time Limit: 2 Seconds Memory Limit: 65536 KB There is a mysterious organization called T ...