Analytics

Saturday, March 23, 2013

Correlated Subquery

Correlated subquery references the outer query in the subqueries WHERE clause. Internally, correlated subqueries are very expensive to process because the inner query must be executed for every row returned by the outer query.

A correlated subquery references one or more columns in the outer query.

The following subquery is known as a correlated subquery because the subquery is related to the outer query.

SQL> SELECT empno, mgr,ename, sal
  2  FROM emp outer
  3  WHERE sal >
  4    (SELECT AVG(sal)
  5     FROM emp inner
  6     WHERE inner.empno = outer.mgr);

     EMPNO        MGR ENAME             SAL
---------- ---------- ---------- ----------
      7788       7566 SCOTT            3000
      7902       7566 FORD             3000

SQL>

Using EXISTS with a Correlated Subquery

SQL> --Using EXISTS with a Correlated Subquery
SQL>
SQL> SELECT empno, ename
  2  FROM emp outer
  3  WHERE EXISTS
  4    (SELECT empno
  5     FROM emp inner
  6     WHERE inner.mgr = outer.empno);

     EMPNO ENAME
---------- ----------
      7902 FORD
      7698 BLAKE
      7839 KING
      7566 JONES
      7788 SCOTT
      7782 CLARK

6 rows selected.

SQL>

Using NOT EXISTS with a Correlated Subquery

SQL> SELECT empno, ename
  2  FROM emp outer
  3  WHERE NOT EXISTS
  4    (SELECT 1
  5     FROM emp inner
  6     WHERE inner.mgr = outer.empno);

     EMPNO ENAME
---------- ----------
      7844 TURNER
      7521 WARD
      7654 MARTIN
      7499 ALLEN
      7934 MILLER
      7369 SMITH
      7876 ADAMS
      7900 JAMES

8 rows selected.

No comments:

Post a Comment