SQL. SUB QUERY

2289 단어 saldoraclesqloracle

서브쿼리 : 메인 SELECT 구문 안에 다른 SELECT문 ▷ 조건문의 형태로 이해하자

  1. PRODUCTS 테이블에서 LIST_PRICE가 최대인 행에서 PRODUCT_ID, PRODUCT_NAME, LIST_PRICE를 찾기
SELECT 
	PRODUCT_ID,
	PRODUCT_NAME,
	LIST_PRICE
	FROM PRODUCTS
		WHERE LIST_PRICE = (SELECT
								MAX(LIST_PRICE)
								FROM PRODUCTS);
  1. PRODUCTS 테이블에서 RPODUCT_NAME, LIST_PRICE, AVG_LIST_PRICE를 구하고 PRODUCT_NAME 기준 오름차순 정렬하라. 단, AVG_LIST_PRICE는 같은 CATEGORY_ID를 가진 LIST_PRICE의 평균값이다.
 SELECT
 	A.PRODUCT_NAME,
    A.LIST_PRICE,
    (
    SELECT
    	AVG(LIST_PRICE)
        FROM PRODUCTS B
        WHERE B.CATEGORY_ID = A.CATEGORY_ID
        ) AVG_LIST_PRICE
    FROM PRODUCTS A
    ORDER BY A.PRODUCT_NAME;
위와같이 SELECT절 안의 서브쿼리를 스칼라 서브쿼리라고 한다.
  1. ORDER_ITEMS 테이블에서 ORDER_ID, ORDER_VALUE를 구하여 상위 10개만 표시하라. ORDER_VALUE는 QUANTITY * UNIT_PRICE로 매출액을 나타낸다.
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 ;

FROM절 안에 있는 SELECT문을 통해 VIEW가 생성됨 -> VIEW에서 ORDER_ID와 ORDER_VALUE중 10개만 표시함 (인라인 뷰 서브쿼리)

  1. PRODUCT 테이블에서 LIST_PRICE의 가격이 평균 가격보다 큰 행(집합)의 PRODUCT_ID, PRODUCT_NAME, lIST_PRICE 컬럼을 구하는 SELECT문을 작성하고 P_NAME으로 정렬
SELECT 
			A.PRODUCT_ID ,
			A.PRODUCT_NAME ,
			A.LIST_PRICE
			FROM PRODUCTS A
			WHERE LIST_PRICE > (SELECT 
									AVG(K.LIST_PRICE)
									FROM PRODUCTS K)
			ORDER BY PRODUCT_NAME ;
  1. CUSTOMERS 테이블에서 CREDIT_LIMIT의 값이 가장 큰 10건의 행을 출력하라 (단, CUSTOMERS 테이블의 모든 열을 출력하고 CREDIT_LIMIT이 동일하다면 NAME 칼럼을 기준으로 오름차순 정렬
SELECT 
			*
			FROM (SELECT *
					FROM CUSTOMERS
					ORDER BY CREDIT_LIMIT DESC, NAME)
			WHERE ROWNUM <= 10;
                            

좋은 웹페이지 즐겨찾기