相关子查询与非相关子查询

来源:互联网 发布:电脑访问不了淘宝网 编辑:程序博客网 时间:2024/05/16 17:22
子查询:嵌套在其他查询中的查询称之。 
子查询又称内部,而包含子查询的语句称之外部查询(又称主查询)。 
所有的子查询可以分为两类,即相关子查询和非相关子查询 
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 


总结:

嵌套查询是通过where子句的子查询返回内层查询的值作为查询条件,进而实现外层查询的查询结果。相关子查询:执行查询的时候先取得外层查询的一个属性值,然后执行与此属性值相关的子查询,执行完毕后再取得外层父查询的下一个值,依次再来重复执行子查询;不相关子查询:子查询的执行不需要提前取得父查询的值,只是作为父查询的查询条件。索引:使用索引是为了加快查询速度。

0 0