UPDATE PARTS SET COST =130 WHERE PART_ID =1 ; COMMIT;
조건을 입력하지 않으면 테이블에 모든 행을 업데이트 한다. 조건문이 없는 UPDATE, DELETE 문은 DB tools 에서 경고문을 던진다.
1 2 3 4
UPDATE PARTS SET COST = COST *1.05 ; COMMIT;
DELETE
데이터를 삭제한다.
1 2 3 4 5 6
DELETE FROM SALES WHERE ORDER_ID =1 AND ITEM_ID =1 ; COMMIT;
VIEW
VIEW 는 물리적으로 데이터를 저장하지 않는 테이블이라고 생각할 수 있는데 쉽게 생각하면 어떤 SQL에 결과값을 저장해 둔 것이라고 생각하면 된다.
INLINE VIEW
SQL 문 안에서 INLINE VIEW 를 사용할 수 있다.
1 2 3 4 5 6 7 8
SELECT A.*FROM ( SELECT NAME , CREDIT_LIMIT FROM CUSTOMERS )A ;
VIEW
복잡한 쿼리에 대한 결과를 VIEW로 저장해두고 사용할 수 있다. 다음 쿼리는 발송된 주문에 대한 연도별 각 고객의 매출 총 금액을 구하는 SQL 문이다.
1 2 3 4 5 6 7 8 9 10 11 12
SELECT C.NAME AS CUSTOMER , TO_CHAR(A.ORDER_DATE, 'YYYY') ASYEAR , SUM( B.QUANTITY * B.UNIT_PRICE ) SALES_AMOUNT FROM ORDERS A , ORDER_ITEMS B , CUSTOMERS C WHERE1=1 AND A.STATUS ='Shipped' AND A.ORDER_ID = B.ORDER_ID AND A.CUSTOMER_ID = C.CUSTOMER_ID GROUPBY C.NAME, TO_CHAR(A.ORDER_DATE, 'YYYY') ORDERBY C.NAME ;
CREATE OR REPLACE VIEW 로 VIEW를 생성할 수있다.
1 2 3 4 5 6 7 8 9 10 11
CREATEOR REPLACE VIEW CUSTOMER_SALES ASSELECT C.NAME AS CUSTOMER , TO_CHAR(A.ORDER_DATE, 'YYYY') ASYEAR , SUM( B.QUANTITY * B.UNIT_PRICE ) SALES_AMOUNT FROM ORDERS A , ORDER_ITEMS B , CUSTOMERS C WHERE1=1 AND A.STATUS ='Shipped' AND A.ORDER_ID = B.ORDER_ID AND A.CUSTOMER_ID = C.CUSTOMER_ID GROUPBY C.NAME, TO_CHAR(A.ORDER_DATE, 'YYYY') ORDERBY C.NAME;
다음 부터는 CUSTOMER_SALES 로 VIEW 테이블을 조회할 수 있다.
1 2 3 4 5 6
SELECT CUSTOMER , SALES_AMOUNT FROM CUSTOMER_SALES WHEREYEAR=2017 ORDERBY SALES_AMOUNT DESC;
서브 쿼리
서브쿼리 기본
select 절에 또다른 select절이 있어서 쿼리 안에 또다른 쿼리가 있으면 서브 쿼리라고 한다.
1 2 3 4 5 6 7 8
SELECT PRODUCT_ID , PRODUCT_NAME , LIST_PRICE FROM PRODUCTS WHERE LIST_PRICE = ( SELECT MAX(LIST_PRICE) FROM PRODUCTS );
스칼라 서브 쿼리
select 중간에 쿼리가 있으면 스칼라 서브 쿼리라고 한다.
1 2 3 4 5 6 7 8 9 10
SELECT A.PRODUCT_NAME , A.LIST_PRICE , ROUND( (SELECTAVG(K.LIST_PRICE) FROM PRODUCTS K WHERE K.CATEGORY_ID = A.CATEGORY_ID ), 2 ) AVG_LIST_PRICE FROM PRODUCTS A ORDERBY A.PRODUCT_NAME;
인라인 뷰 서브 쿼리
앞서서 뷰를 보았는데 인라인 뷰도 일종의 서브 쿼리이다. 그래서 이를 인라인 뷰 서브쿼리라고 한다.
1 2 3 4 5 6 7 8 9 10 11
SELECT ORDER_ID , ORDER_VALUE FROM ( SELECT ORDER_ID , SUM( QUANTITY * UNIT_PRICE ) ORDER_VALUE FROM ORDER_ITEMS GROUPBY ORDER_ID ORDERBY ORDER_VALUE DESC ) WHERE ROWNUM <=10;