SQL

VIEW

peach_h 2022. 10. 5. 21:56
INLINE VIEW
SELECT A.* FROM(SELECT NAME, CREDIT_LIMIT FROM CUSTOMERS) A;

 

SELECT문의 FROM 절에 쓴 특정 SELECT 문을 INLINE VIEW라고함.

 

 

 

INLINE VIEW속 INLINE VIEW
SELECT A.* FROM
     ( SELECT A.* FROM
            ( SELECT NAME, CREDIT_LIMIT FROM CUSTOMERS) A) A;

INLINE VIEW안에 INLINE VIEW넣기 무한으로 가능함 !

 

 

 

 

연도별 각 고객의 매출 총 금액 구하기
SELECT C.NAME AS CUSTOMER, TO_CHAR(A.ORDER_DATE, 'YYYY') AS YEAR,
     SUM( B.QUANTITY * B.UNIT_PRICE ) SALES_AMOUNT
  FROM ORDERS A, ORDER_ITEMS B, CUSTOMERS C
	WHERE 1=1
   	AND A.STATUS = 'Shipped'
   	AND A.ORDER_ID = B.ORDER_ID
   	AND A.CUSTOMER_ID = C.CUSTOMER_ID
 GROUP BY C.NAME, TO_CHAR(A.ORDER_DATE, 'YYYY')
 ORDER BY C.NAME;

 

STATUS = 'Shipped' 배송된

주문번호 ID , CUSTOMER ID 조인

연도별로 GROUP_BY

SUM( 판매량*가격 ) = SALES AMOUNT  연도별 매출액

 

 

 

 

CREATE OR REPLACE VIEW ~ AS SELECT ~
CREATE OR REPLACE VIEW CUSTOMER_SALES AS
SELECT C.NAME AS CUSTOMER, TO_CHAR(A.ORDER_DATE, 'YYYY') AS YEAR,
       SUM( B.QUANTITY * B.UNIT_PRICE ) SALES_AMOUNT
  FROM ORDERS A, ORDER_ITEMS B, CUSTOMERS C
 WHERE 1=1
   AND A.STATUS = 'Shipped'
   AND A.ORDER_ID = B.ORDER_ID
   AND A.CUSTOMER_ID = C.CUSTOMER_ID
 GROUP BY C.NAME, TO_CHAR(A.ORDER_DATE, 'YYYY')
 ORDER BY C.NAME;

CUSTOMER_SALES라는 VIEW를 만든다.

 

 

SELECT *
  FROM CUSTOMER_SALES;

간단히 작성해도 똑같은 결과집합을 볼 수 있음

 

 

내부 데이터 값이 변하면 ?? -> 항상 내용이 변화되서 조회 됨 문제없다.

VIEW를 사용하면 일관성있고 통일성있게 업무를 처리할 수 있음 !!

 

 

 

 

2017년도에 매출이 높은 고객순으로 정렬
SELECT CUSTOMER, SALES_AMOUNT
  FROM CUSTOMER_SALES
WHERE YEAR = 2017
ORDER BY SALES_AMOUNT DESC;

 

 

 

총 매출이 가장 높은 고객은 ?
SELECT CUSTOMER, SUM(SALES_AMOUNT) AS SUM_SALES_AMOUNT
  FROM CUSTOMER_SALES
GROUP BY CUSTOMER
ORDER BY SUM_SALES_AMOUNT DESC;

고객별로 SALES_AMOUNT를 모두 더해서 SUM_SALES_AMOUNT를 구한 뒤 , 내림차순으로 정렬