精华内容
下载资源
问答
  • 相关子查询

    千次阅读 2010-05-13 13:50:00
    子查询:嵌套在其他查询中的查询称之。 子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。 所有的子查询可以分为两类,即相关子查询和非相... 故非相关子查询比相关子查询效率高 ms对于相关子查询的解

    子查询:嵌套在其他查询中的查询称之。
    子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。
    所有的子查询可以分为两类,即相关子查询和非相关子查询
    1. 非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。
    2. 相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。
    故非相关子查询比相关子查询效率高

     

    ms对于相关子查询的解释:
    许多查询都可以通过执行一次子查询并将得到的值代入外部查询的 WHERE 子句中进行计算。在包括相关子查询(也称为重复子查询)的查

    询中,子查询依靠外部查询获得值。这意味着子查询是重复执行的,为外部查询可能选择的每一行均执行一次。

     

    --非相关子查询
    SELECT EMPNO, LASTNAME
        FROM EMPLOYEE
        WHERE WORKDEPT = 'A00'
         AND SALARY > (SELECT AVG(SALARY)
                  FROM EMPLOYEE
                  WHERE WORKDEPT = 'A00')

    --相关子查询
    SELECT E1.EMPNO, E1.LASTNAME, E1.WORKDEPT
        FROM EMPLOYEE E1
        WHERE SALARY > (SELECT AVG(SALARY)
                  FROM EMPLOYEE E2
                  WHERE E2.WORKDEPT = E1.WORKDEPT)
        ORDER BY E1.WORKDEPT

     

    使用相关子查询比较多的就是使用exists关键字。

    EXISTS 关键字前面没有列名、常量或其他表达式。由 EXISTS 引入的子查询的选择列表通常几乎都是由星号 (*) 组成。由于只是测试是否存在符合子查询中指定条件的行,因此不必列出列名。

    由于通常没有备选的、非子查询的表示法,因此 EXISTS 关键字很重要。尽管一些使用 EXISTS 创建的查询不能以任何其他方法表示,但许多查询都可以使用 IN 或者由 ANY 或 ALL 修改的比较运算符来获取类似结果。

     

    其实自己经常在用相关子查询只是不知道叫啥名字罢了,呵呵

     

    参考链接:
    http://technet.microsoft.com/zh-cn/library/ms189259.aspx
    http://technet.microsoft.com/zh-cn/library/ms187638.aspx

    展开全文
  • 【SQL】(不)相关子查询

    千次阅读 多人点赞 2020-04-09 17:15:08
    相关子查询特点执行规则示例 (不)相关查询在嵌套查询中应用,嵌套查询最能体现SQL结构化查询的特点 本篇内容,先看示例,食用更佳 1. 不相关子查询 特点 由子向父执行(子 -> 父),且父查询和子查询可以...

    写在前面:大家好K。首先为你点进这篇有趣的文章点赞👍!文章在撰写过程中难免有疏漏和错误,欢迎你在下方留言指出文章的不足之处;如果觉得这篇文章对你有用,也欢迎你点赞和留下你的评论。更多内容请点进👉我的博客K。👈阅览。

    (不)相关查询在嵌套查询中应用,嵌套查询最能体现SQL结构化查询的特点

    本篇内容,先看示例,食用更佳

    1. 不相关子查询

    特点

    由子向父执行(子 -> 父),且父查询和子查询可以轻松分开单独处理

    示例

    题目

    查询与’韩梅梅’同专业的学生信息

    分析

    子查询:得到’韩梅梅’的专业名

    父查询:利用子查询的结果,查询同专业的学生信息

    /* 该表结构为:
     * 学生信息表(学号,姓名,专业名)
     */
    SELECT 学号, 姓名, 专业名
    FROM 学生信息表
    WHERE 专业 IN
    	(SELECT 专业名
         FROM 学生信息表
         WHERE 姓名='韩梅梅');
    

    分步第一步:可以轻松手动分开查询,先进行子查询

    /*
     * 第一步,查询'韩梅梅'的专业名
     */
    SELECT 专业名
    FROM 学生信息表
    WHERE 姓名='韩梅梅'
    
    /*
    结果示例:得到一个集合N,里面只有一个元素'计科'
    |专业名|
    +-----+
    | 计科 |
    */
    

    分步第二步:再利用第一步结果集合N,执行父查询的操作

    /*
     * 第二步,查询'计科'专业的学生信息
     */
    SELECT 学号, 姓名, 专业名
    FROM 学生信息表
    WHERE 专业 IN N -- N 为第一步结果
    

    类似的,父子查询仅有查询结果直接的关系(父用子的结果),而查询条件之间无依赖,则为不相关子查询

    2. 相关子查询

    特点

    1. 父查询和子查询使用一些相同的查询条件,所以不易分开处理
    2. 相关子查询不能一次就求解出子查询的结果,必须反复求值
    3. 相关子查询事先规定了执行规则,有固定处理顺序

    执行规则

    (父 -> 子 -> 父)

    1. 外层查询条件的表中取出一个元组传送给内层
    2. 执行内层查询,得到一个结果,返送给外层
    3. 执行外层查询,得到一个结果,作为这一次查询结果
    4. 执行步骤1,直到外层查询条件的表的元组全部取完

    执行规则的第一步,天坑!每次查询时只取一行,随即马上传送给内层来执行!!!

    外层不是一次性传整张表,否则内层条件与外层条件同为一张表,就无意义,一定体现差异!!!

    不是从内层开始执行,不同于不相关子查询,第一步在外层取元组!!!

    不是一次就求出结果,是反复查询,自带了循环!!!

    示例

    题目:查询每个学生超过他自己选修课程平均成绩的课程名

    /* 该表结构为:
     * 课程成绩表(学号,课程名,成绩)
     */
    SELECT 学号, 课程名
    FROM 课程成绩表 x
    WHERE 成绩>=(SELECT AVG(成绩)
                  FROM 课程成绩表 y
    			  WHERE y.学号=x.学号);
    

    最后一行需要别名的原因

    外层:课程成绩表在循环时是一行一行的取值;

    内层:需要整张表y由某一行x(x在内层查询中由相关子查询的规定已经成一个元组,而非整张表)限定,所以需要起别名区分

    (表面x,y同为一张表,私底下x已变身为一行元组)

    步骤

    1. 课程成绩表中取一行(x在此处含义为元组),传送给子查询
    2. 子查询通过WHERE限定,得到仅含x元组对应学号的所有课程成绩信息的表☆
    3. 从☆表中,求得成绩的平均值,即为x元组对应学号的所有课程平均成绩O
    4. 将O带到外层查询(此处外层x的含义又变成整张表),得本次循环的查询结果
    5. 循环执行步骤1,直到课程成绩表的所有元组处理完,得到最终值
    展开全文
  • 子查询可以分为 嵌套子查询和 相关子查询 两类 1.1 嵌套子查询 1.1.1 执行顺序(由内至外) (1)执行子查询道,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。 (2)执行外部查询,并显示整个...

    1 子查询分类

    子查询可以分为 嵌套子查询 和 相关子查询 两类

    1.1 嵌套子查询

    1.1.1 执行顺序(由内至外)

    (1)执行子查询道,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用。
    (2)执行外部查询,并显示整个结果。

    1.1.2 实例说明

    查询商品id为TNT2的订单号。

    SELECT
    	order_num
    FROM
    	orders
    WHERE
    	order_num IN (
    		SELECT
    			order_num
    		FROM
    			orderitems
    		WHERE
    			prod_id = 'TNT2'
    	)

    上面的查询分为两步:

    (1)子查询

    SELECT
    	order_num
    FROM
    	orderitems
    WHERE
    	prod_id = 'TNT2'

    (2)外部查询

    SELECT
    	order_num
    FROM
    	orders
    WHERE
    	order_num IN (20005, 20007)

    1.2 相关子查询

    1.2.1 执行顺序(由外至内)

    (1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。
    (2)执行内层查询,得到子查询操作的值。
    (3)外查询根据子查询返回的结果或结果集得到满足条件的行。
    (4)然后外层查询取出下一个元组重答复做步骤1-3,直到外层的元组全部处理完毕。  

    1.1.2 实例说明

    查询客户的订单总数

    SELECT
    	cust_name,
    	cust_state,
    	(
    		SELECT
    			COUNT(*)
    		FROM
    			orders o
    		WHERE
    			o.cust_id = c.cust_id
    	) AS orders
    FROM
    	customers c
    GROUP BY
    	cust_name;

    上面的查询分为两步:

    (1)外部查询

    SELECT
    	cust_name,
    	cust_state,
      cust_id
    FROM
    	customers 
    GROUP BY
    	cust_name;

    (2)子查询

    SELECT
    	COUNT(*)
    FROM
    	orders o
    WHERE
    	o.cust_id = c.cust_id

    展开全文
  • 数据库的相关子查询

    千次阅读 2018-06-01 14:05:26
    子查询在其父查询处理前求解,它的执行不依赖于父查询的...这类子查询的查询条件往往依赖于其父查询的某属性值,称为相关子查询。在相关子查询中,可使用exists测试查询是否存在返回值。例如:select eno, ename ...

    子查询在其父查询处理前求解,它的执行不依赖于父查询的任何条件,每个子查询仅执行一次,子查询的结果集为父查询的where条件所用,这类查询叫做不相关子查询

    但在有的查询中,子查询的执行依赖于父查询的某个条件,子查询不止执行一次。这类子查询的查询条件往往依赖于其父查询的某属性值,称为相关子查询。

    在相关子查询中,可使用exists测试查询是否存在返回值。

    例如:select eno, ename

          from employee e

          where exists (select * from item where eno=e.eno);

    在上例中,子查询不返回任何数据,只产生逻辑值:子查询结果非空,返回值为真(true);否则返回值为假(false)。

    执行该相关子查询的过程是:从外查询的关系(employee)中依次取出一个元组,根据它的eno值在内查询中进行检查,若父查询的where子句为真,则此元组放入结果表;若为假,则舍去。这样反复处理,直至父查询关系的元组全部处理完为止。

    展开全文
  • 什么是子查询? 使用子查询解决问题:谁的工资比SCOTT高? 子查询的语法 子查询(内查询)在主查询之间一次执行完成。\color{red}{子查询(内查询)在主查询之间一次执行完成。}子查询(内查询)在主查询...
  • SQL——相关子查询和不相关子查询

    千次阅读 2019-11-03 18:24:41
    SQL——相关子查询和不相关子查询不相关子查询相关子查询 在SQL中经常使用在“FROM/WHERE”字句中包含一个形如“SELECT-FROM-WHERE”的查询块,这样的查询块称为子查询或嵌套查询,包含子查询的语句称为父查询或外部...
  • MySQL中的相关子查询和不相关子查询

    千次阅读 2019-01-25 19:40:24
    子查询中有相关子查询和不相关子查询:相关子查询是指查询结果依赖于外部查询的子查询,外部查询每执行一次,内部子查询也会执行一次;而不相关子查询是指独立于外部查询的子查询,内部子查询仅执行一次,执行完毕后...
  • Oracle 相关子查询理解

    千次阅读 2018-07-28 17:05:27
    相关子查询:执行查询的时候先取得外层查询的一个属性值,然后执行与此属性值相关的子查询,执行完毕后再取得外层父查询的下一个值,依次再来...当然相关子查询都可以使用group by (非相关子查询)代替,个人喜欢...
  • Oracle - 一般子查询+相关子查询

    千次阅读 2019-04-08 21:45:41
    一般子查询(select查询结果作为另一个查询的条件 => 不含有Exists的SQL查询语句) 相关子查询(含有Exists的SQL查询语句) Example-1: Example-2: 一:执行顺序与原理 ◼ ◼ 普通子查询的执行顺序是...
  • 【MySql】相关子查询

    千次阅读 2019-06-18 01:44:21
    一、相关子查询 基本特点:执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。 执行过程: (1)从外层查询中取出一个元组,将元组相关列的值传给内层查询。 (2)执行内层查询,得到子查询...
  • SQL子查询、相关子查询

    千次阅读 2018-10-21 17:52:35
    子查询 子查询是嵌套在其他查询中的查询。子查询总是从内向外处理。 注意: 1、在使用子查询时尽量把子查询分解为多行并且适当进行缩进,能极大的简化子查询的使用。 2、不能嵌套太多的子查询,这样会降低性能。...
  • 1.相关子查询: 先执行主查询,再针对主查询返回的每一行数据执行子查询,如果子查询能够返回行,则这条记录就保留,否则就不保留。 --举例1:相关子查询查询:查询所有是领导的员工信息 select * from emp e1 where ...
  • mysql相关子查询和嵌套子查询

    千次阅读 2019-06-20 13:42:10
    1.相关子查询,嵌套子查询的执行依赖外部的查询,如下: 相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询的表。 例1: SELECT empno,ename,sal,deptno,(SELECT AVG(sal) FROM...
  • 相关子查询和不相关子查询

    万次阅读 2018-08-18 12:06:55
    相关子查询: 比如 select t.id,t.name,t.pass from student t where 80<=(select f.score from f where f.id=t.id and f.name='xxx') 这就是1个相关子查询,可以理解为2层循环,要想执行内层的查询,...
  • 非相关子查询和相关子查询执行过程详解

    万次阅读 热门讨论 2015-12-13 23:43:33
    前段时间有一个相关子查询的SQL语句,看不太懂他是如何执行的,为什么会出现那个结果。着实纠结了一把。下面来讲一下非相关子查询和相关子查询的执行过程是怎样的。 非相关子查询 先看一个非相关子查询到sql语句。...
  • Oracle: 四、Oracle连接查询,子查询(相关子查询,嵌套子查询)(下) 内容简介  1,Demo连接查询。2,Demo 子查询(相关子查询,嵌套子查询)。 技术与环境 操作系统: ...
  •  所有的子查询可以分为两类,即相关子查询和非相关子查询 1. 非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 2. 相关子查询的执行依赖于外部查询的数据,外部查询...
  • 相关子查询和嵌套子查询两者之间的区别 表的结构如下: mysql> select * from product; +----+------+-------+-----+ | id | name | price | num | +----+------+-------+-----+ | 1 | 伊利 | 68 | 1 | | 2 |...
  • 相关子查询与非相关子查询

    千次阅读 2014-03-24 09:55:16
    相关子查询与非相关子查询
  • 文章目录两者的各种叫法相关子查询MySQL解释相关子查询Wikipedia解释相关子查询执行步骤拆解相关子查询和嵌套查询的区别参考资料 两者的各种叫法 相关子查询叫做:Correlated Subqueries 非相关子查询也叫普通子...
  • 详细版本见个人博客:MySQL嵌套子查询和相关子查询执行过程的区别 子查询可以分为 相关子查询 和 嵌套子查询 两类。 一、本文用到的测试数据 假设Books表如下: 类编号 图书名 出版社 价格 2 c#高级应用 ...
  • SQL相关子查询与非相关子查询

    万次阅读 多人点赞 2018-07-05 10:31:04
    SQL子查询可以分为相关子查询和非相关子查询两类。 假设Books表如下: 类编号 图书名 出版社 价格 2 c#高级应用 圣通出版 23.00 2 Jsp开发应用 机械出版社...
  • 子查询 1.不相关子查询:()里的查询可以独立运行,先执行子查询,在执行外查询 单行子查询:因为子查询的结果是单行单列 – 查询比sallen的薪水高的员工 select ename,sal from emp where sal>(select sal from ...
  • oracle中的相关子查询(correlated subqueries) 以前我们曾介绍过oracle中的嵌套子查询,你可以在你需要的任何位置(除了group by子句)使用嵌套之查询,例如常用的where子句位置,你也可以在hav
  • (1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递...(2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。 因此非相关子查询比相关子查询效率高...
  • 如果一个select语句能够返回单个值或者一列值,且该select语句嵌套在另一个SQL语句(例如select语句、insert语句、update语句或者delete语句)中,那么该select语句成为“子查询”(也叫内层查询),包含子查询的SQL...
  • 转自... 相关子查询也可以称为关联子查询 SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类。前提,假设Books表如下: 类编号 图书名 出版社 价格 -----------------
  • 相关子查询&非相关子查询概念

    万次阅读 2010-01-19 14:17:00
    (又称外部查询) 子查询分为两类:相关子查询非相关子查询在主查询中,每查询一条记录,需要重新做一次子查询,这种称为相关子查询。在主查询中,子查询只需要执行一次,子查询结果不再变化,供主查询使用,这种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 386,436
精华内容 154,574
关键字:

相关子查询