서브 쿼리
< 메인 쿼리 >
SELECT
MAX(LIST_PRICE)
FROM PRODUCTS;
PRODUCT에서 LIST_PRICE가 최대인 값
SELECT
PRODUCT_ID, PRODUCT_NAME, LIST_PRICE
FROM PRODUCTS
WHERE LIST_PRICE = 8867.99 ;
LIST_PRICE가 8867.99인 행의 PRODUCT_ID, PRODUCT_NAME, LIST_PRICE
SELECT
PRODUCT_ID, PRODUCT_NAME, LIST_PRICE
FROM PRODUCTS
WHERE LIST_PRICE = (SELECT MAX(LIST_PRICE)
FROM PRODUCTS);
SQL안에 SELECT문이 2개 / MAIN 내부에 기생하는 SQL이 서브 쿼리임 !
PRODUCT의 가격이 제일 비싼 제품의 정보가 궁금해
1. 먼저 가장 비싼 PRODUCT 찾기 ( 서브쿼리 )
2. 그 PRICE의 정보 가져오기 ( 메인쿼리 )
두번 칠 SQL을 한번에 끝낼 수 있음 !
스칼라 서브 쿼리
SELECT
A.PRODUCT_NAME, A.LIST_PRICE,
ROUND ( (SELECT AVG(K.LIST_PRICE)
FROM PRODUCTS K
WHERE K.CATEGORY_ID = A.CATEGORY_ID ), 2) AVG_LIST_PRICE
FROM PRODUCTS A
ORDER BY A.PRODUCT_NAME;
CATEGORY_ID 별 PRODUCT_NAME의 LIST_PRICE와 AVG_LIST_PRICE를 알고 싶다
1. LIST_PRICE 평균 구해서 2자리수 반올림( 서브쿼리 )
2. PRODUCT_NAME, LIST_PRICE, AVG_LIST_PRICE 뽑기 ( 메인쿼리 )
서브 쿼리가 SELECT와 FROM 사이에 있으면 스칼라 서브 쿼리임 !
INLINE VIEW 서브 쿼리
SELECT ORDER_ID
, ORDER_VALUE
FROM
(
SELECT ORDER_ID
, SUM( QUANTITY * UNIT_PRICE ) ORDER_VALUE
FROM ORDER_ITEMS
GROUP BY ORDER_ID
ORDER BY ORDER_VALUE DESC
)
WHERE ROWNUM <= 10;
ORDER_ID 별로 그룹화해서 ORDER_VALUE로 줄세움
ORDER_VALUE = 물량*PRICE를 ORDER_ID별로 더한것.
ROWNUM <= 10; : 10까지만 뽑아라
☆★ INLINE VIEW도 서브쿼리의 일종이다.
INLINE VIEW = SELECT의 FROM절에 쓴SELECT
FROM에 테이블이 없고 바로 SELECT가 나온다 ?
=> INLINE VIEW 또는 INLINE VIEW서브 쿼리임.
'SQL' 카테고리의 다른 글
트랜잭션 (0) | 2022.10.09 |
---|---|
연습문제풀이 (0) | 2022.10.05 |
VIEW (0) | 2022.10.05 |
INSERT / UPDETE / DELETE (1) | 2022.10.05 |
SELECT문 ( DUAL / ORDER BY / DISTINCT / WHERE ) (0) | 2022.10.04 |