반응형
부속질의
: 하나의 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
반응형