K 개발자

중첩질의 - WHERE 부속질의 본문

데이터베이스/Oracle SQL

중첩질의 - WHERE 부속질의

ddingz 2021. 8. 25. 11:29

중첩질의 - WHERE 부속질의

중첩질의nested subquery는 WHERE 절에서 사용되는 부속질의를 말한다.
WHERE 절은 보통 데이터를 선택하는 조건 혹은 술어predicate와 같이 사용된다.
그래서 중첩질의를 술어 부속질의predicate subquery라고도 부른다.

중첩질의는 주 질의에 사용된 자료 집합의 조건을 WHERE 절에 서술한다.
주 질의의 자료 집합에서 한 행씩 가져와 부속질의를 수행하며, 연산 결과에 따라 WHERE 절의 조건이 참인지 거짓인지 확인하여 참일 경우 주 질의의 해당 행을 출력한다.
중첩질의의 연산자는 다음과 같다.

술어 연산자 반환 행 반환 열 상관
비교 =, >, <, >=, <=, < > 단일 단일 가능
집합 IN, NOT IN 다중 다중 가능
한정 ALL, SOME(ANY) 다중 단일 가능
존재 EXISTS, NOT EXISTS 다중 다중 필수

연습문제

-- 평균 주문금액 이하의 주문에 대해서 주문번호와 금액을 보이시오.
SELECT orderid, saleprice
FROM Orders
WHERE saleprice <= (
    SELECT AVG(saleprice)
    FROM Orders);
-- 각 고객의 평균 주문금액보다 큰 금액의 주문 내역에 대해서 주문번호, 고객번호, 금액을 보이시오.
SELECT orderid, custid, saleprice
FROM Orders md
WHERE saleprice > (
    SELECT AVG(saleprice)
    FROM Orders so
    WHERE md.custid = so.custid);
-- '대한민국'에 거주하는 고객에게 판매한 도서의 총판매액을 구하시오.
SELECT SUM(saleprice) "total"
FROM Orders
WHERE custid IN (
    SELECT custid
    FROM Customer
    WHERE address LIKE '%대한민국%');
-- 3번 고객이 주문한 도서의 최고 금액보다 더 비싼 도서를 구입한 주문의 주문번호와 금액을 보이시오.
SELECT orderid, saleprice
FROM Orders
WHERE saleprice > ALL (
    SELECT saleprice
    FROM Orders
    WHERE custid = '3');
-- EXISTS 연산자를 사용하여 '대한민국'에 거주하는 고객에게 판매한 도서의 총판매액을 구하시오.
SELECT SUM(saleprice) "total"
FROM Orders od
WHERE EXISTS (
    SELECT *
    FROM Customer cs
    WHERE address LIKE '%대한민국%' AND cs.custid = od.custid);

'데이터베이스 > Oracle SQL' 카테고리의 다른 글

인라인 뷰 - FROM 부속질의  (0) 2021.08.25
스칼라 부속질의 - SELECT 부속질의  (0) 2021.08.25
ROWNUM  (0) 2021.08.24
NULL 값 처리  (0) 2021.08.24
날짜·시간 함수  (0) 2021.08.24
Comments