오라클 - 부속질의란? 종류 사용법

반응형

부속질의

: 하나의 SQL문 안에 다른 SQL 문이 중첩된 질의

 

데이터가 대량일 경우

→ 데이터를 모두 합쳐서 연산하는 조인보다 필요한 데이터만 찾아서 공급해 주는 부속질의가 성능이 더 좋다.

주질의 : 외부질의

부속질의 : 내부 질의

 

스칼라 부속질의 - SELECT 부속 질의

SELECT (SELECT NAME
                FROM CUSTOMER CS
                WHERE CS.CUSTID=OD.CUSTID) " NAME ", SUM(SALEPRICE) "TOTAL"
FROM ORDERS OD
GROUP BY OD.CUSTID;

인라인 뷰 - FROM 부속질의

SELECT CS.NAME, SUM(OD.SALEPRICE) "TOTAL"
FROM (SELECT CUSTID, NAME
            FROM CUSTOMER
            WHERE CUSTID <=2) CS,
            ORDERS OD
WHERE CS.CUSTID = OD.CUSTID
GROUP BY CS.NAME;

중첩질의 - WHERE 부속질의

SELECT ORDERID, CUSTID, SALEPRICE
FROM ORDERS OD
WHERE SALEPRICE <=(SELECT AVG(SALEPRICE)
                                        FROM ORDERS SO
                                        WHERE OD.CUSTID = SO.CUSTID);

IN, NOT IN

IN 연산자는 주질의의 속성 값이 부속질의에서 제공한 결과 집합에 있는지 확인(CHECK)하는 역할을 한다. 

주질의는 WHERE 절에 사용되는 속성 값을 부속질의의 결과 집합과 비교해 하나라도 있으면  참이 된다.

SELECT SUM(SALEPRICE) "TOTAL"
FROM ORDERS
WHERE CUSTID IN (SELECT CUSTID
                                 FROM CUSTOMER
                                WHERE ADDRESS LIKE '%대한민국%');

ALL, SOME

ALL, SOME(ANY) 연산자는 비교 연산자와 함께 사용된다.

ALL: 모든

SOME: 하나 이상

SELECT (SELECT NAME
                FROM CUSTOMER CS
                WHERE CS.CUSTID = OD.CUSTID) "NAME", SALEPRICE
FROM ORDERS OD
WHERE SALEPRICE > ALL (SELECT SALEPRICE
                                              FROM ORDERS
                                              WHERE CUSTID='3');

EXIST, NOT EXISTS

데이터의 존재 유무를 확인하는 연산자다.

SELECT SUM(SALEPRICE) "TOTAL"
FROM ORDERS OD
WHERE EXISTS(SELECT *
                           FROM CUSTOMER CS
                           WHERE ADDRESS LIKE '%대한민국%' AND CS.CUSTID=OD.CUSTID);

 

 

 

 

 

728x90
반응형