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 |