3. DML 명령과 서브쿼리 --DML: UPDATE,DELETE,INSERT


 - 서브쿼리를 이용하여 데이터의 삽입, 변경, 삭제 수행
 1) 자료삽입

 (사용형식)
  INSERT INTO 테이블명[(컬럼명,...)] --INSET,CREATE 서브쿼리는 괄호안에 들어가지 않음
    서브쿼리
   . INSERT 문에 사용되는 서브쿼리는 '( )'와 VALUES절을 생략함
   . '(컬럼명,...)'이 사용된 경우 서브쿼리의 SELECT 절의 컬럼의 갯수, 순서, 타입이 동일해야함

    ✔ 사용예)재고수불테이블(REMAIN)에 상품테이블의 자료 중 상품코드, 적정재고를 이용하여
                   모든 상품정보를 입력하시오

    [자료]
      REMAIN_YEAR에는 '2020'
      PROD_ID : 상품테이블의 PROD_ID
      REMAIN_J_00 : 상품테이블의 적정재고(PROD_PROPERSTOCK)
      REMAIN_I : 0
      REMAIN_O : 0
      REMAIN_J_99 : 상품테이블의 적정재고(PROD_PROPERSTOCK)
      REMAIN_DATE : '2019/12/31'
      
  INSERT INTO REMAIN(REMAIN_YEAR,PROD_ID,REMAIN_J_00,REMAIN_I,REMAIN_O,
                     REMAIN_J_99,REMAIN_DATE)
    SELECT '2020',PROD_ID,PROD_PROPERSTOCK,0,0,PROD_PROPERSTOCK,TO_DATE('20191231')
      FROM PROD;

  2) 자료 갱신

 (사용형식)
  UPDATE 테이블명 [별칭]
     SET (컬럼명,...)=(서브쿼리)
  [WHERE 조건];

   - SET 절에 기술된 컬럼의 갯수,순서,타입과 서브쿼리의 SELECT문의 갯수,순서,타입은 일치해야함
   - 'WHERE 조건'이 사용되지 않으면 모든 자료가 갱신 대상이 됨(주의를 요함)
  

      ✔사용예)매입테이블에서 2020년 1월 제품별 매입수량을 구한뒤 재고 수불테이블에
                     매입수량을 반영하시오.

(서브쿼리 : 2020년 1월 제품별 매입수량)
   SELECT BUY_PROD,
          SUM(BUY_QTY) AS SQTY
     FROM BUYPROD
    WHERE BUY_DATE BETWEEN TO_DATE('20200101') AND TO_DATE('20200131')
    GROUP BY BUY_PROD;
   
 COMMIT;
 
 ROLLBACK;
   
 (메인쿼리 : UPDATE문)
   UPDATE REMAIN R
      SET (R.REMAIN_I,R.REMAIN_J_99,R.REMAIN_DATE)=
          (SELECT REMAIN_I+A.SQTY,R.REMAIN_J_99+A.SQTY,TO_DATE('20200331')
             FROM (SELECT BUY_PROD,SUM(BUY_QTY) AS SQTY
                     FROM BUYPROD
                    WHERE BUY_DATE BETWEEN TO_DATE('20200201') 
                          AND TO_DATE('20200331')
                    GROUP BY BUY_PROD)A
            WHERE A.BUY_PROD=R.PROD_ID)       
    WHERE R.PROD_ID IN (SELECT DISTINCT BUY_PROD
                          FROM BUYPROD
                         WHERE BUY_DATE BETWEEN TO_DATE('20200201') 
                               AND TO_DATE('20200331')); 
                               
    SELECT * FROM REMAIN;

'ORACLE 복습 & 정리' 카테고리의 다른 글

[ORACLE] SEQUENCE,동의어 221130-02  (0) 2022.11.30
[ORACLE] 계층형 쿼리 221129-03  (0) 2022.11.30
[ORACLE] VIEW 221130-01  (0) 2022.11.30
[ORACLE] 집합연산자 221129-02  (0) 2022.11.29
[ORACLE] 서브쿼리 221128-01  (0) 2022.11.29

+ Recent posts