【转】相关子查询和非相关子查询

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

--非相关子查询
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的子查询是指在一个查询语句中嵌套另一个查询语句。根据子查询和外部查询之间的相关性,可以将子查询分为相关子查询相关子查询相关子查询指的是子查询的结果依赖于外部查询的结果。在相关子查询中,子查询的执行是在外部查询之后进行的。例如,我们可以使用相关子查询来查找具有特定属性的行。例如,我们可以使用一个外部查询来检索所有订单总数大于平均订单总数的顾客: SELECT * FROM Customers c WHERE (SELECT COUNT(*) FROM Orders o WHERE o.CustomerID = c.CustomerID) > (SELECT AVG(OrderCount) FROM (SELECT COUNT(*) AS OrderCount FROM Orders GROUP BY CustomerID) AS Subquery) 在上面的例子中,子查询的结果依赖于外部查询(即外部查询的结果是子查询的一部分)。 相关子查询是指子查询的结果独立于外部查询的结果。在相关子查询中,子查询可以在外部查询执行之前或之后执行。例如,我们可以使用相关子查询来返回某个表中的最大值: SELECT * FROM Products WHERE Price = (SELECT MAX(Price) FROM Products) 在上面的例子中,子查询的结果独立于外部查询(即子查询在外部查询执行之前执行)。 总而言之,相关子查询依赖于外部查询的结果,而相关子查询与外部查询的结果独立。根据具体的需求,我们可以选择使用相关子查询相关子查询来实现所需的查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值