K 개발자
중첩질의 - WHERE 부속질의 본문
중첩질의 - 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