SQL

서브 쿼리

peach_h 2022. 10. 5. 23:02
서브 쿼리

< 메인 쿼리 >

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