프로그래밍/DBMS

서브쿼리 Subquery

Heidong 2021. 8. 16. 13:09
반응형

WITH 서브 쿼리

    WITH tmp AS (
         SELECT b.bCode, bName, bPrice, b.pNum, pName, sDate, 
                   s.cNum, cName, qty, bPrice * qty amt
         FROM book b
         JOIN  pub p  ON  b.pNum = p.pNum
         JOIN  dsale d  ON  b.bCode = d.bCode
         JOIN  sale s  ON  d.sNum = s.sNum
         JOIN  cus c  ON  s.cNum = c.cNum
    ) 
    SELECT bCode, bName, SUM(amt)
    FROM tmp
    GROUP BY bCode, bName;

 

단일 행 서브쿼리

     SELECT empNo, sal FROM emp
     WHERE sal < (SELECT AVG(sal) FROM emp);

다중 행 서브쿼리

       SELECT bCode, bName
       FROM book
       WHERE bCode IN ( SELECT DISTINCT bCode FROM dsale );
     SELECT empNo, name, sal
     FROM emp
     WHERE sal > ALL ( 2000000, 3000000, 4000000 );

ALL은 모두 만족 시켜야 한다.

 

       SELECT bName FROM book
       WHERE EXISTS ( SELECT * FROM dsale WHERE qty >= 10 );
          -- 다음과 동일 : qty >= 10 인 레코드가 존재하므로
       SELECT bName FROM book;

 

상호 연관 서브쿼리

(성능은 안좋음)

     SELECT name, sal,
        ( SELECT COUNT( e2.sal ) + 1  FROM  emp  e2
               WHERE  e2.sal > e1.sal ) 순위
      FROM emp e1;

 

반응형