K'some 정보들/자료정리

오라클 SQL - DML(UPDATE, DELETE, INSERT)

AwesomeK 2022. 10. 3. 14:53
728x90

앞에서 테이블과 시퀀스를 만들었다면, 해당으로 데이터를 등록및 수정해보자.

 

1. INSERT - 테이블에 데이터 등록하기

  1). 1건씩 데이터 등록하는 방식.

//임직원 테이블에 데이터 등록하기

INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) VALUES (SEQ_TEST_EMP.NEXTVAL, 'first','첫번째사원',1);
INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) VALUES (SEQ_TEST_EMP.NEXTVAL, 'secont','두번째사원',1);
INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) VALUES (SEQ_TEST_EMP.NEXTVAL, 'third','세번째사원',2);
INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) VALUES (SEQ_TEST_EMP.NEXTVAL, 'fourth','네번째사원',2);
INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) VALUES (SEQ_TEST_EMP.NEXTVAL, 'fifth','다섯번째사원',3);
INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) VALUES (SEQ_TEST_EMP.NEXTVAL, 'sixth','여섯번째사원',4);
INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) VALUES (SEQ_TEST_EMP.NEXTVAL, 'seventh','일곱번째사원',4); 

 

//부서 테이블에 데이터 등록하기

INSERT INTO TEST_DEPT (DEPT_NO, DEPT_NM, TEAM_NM) VALUES (1, '경리부서','경리1팀');
INSERT INTO TEST_DEPT (DEPT_NO, DEPT_NM, TEAM_NM) VALUES (2, '경리부서','경리2팀');
INSERT INTO TEST_DEPT (DEPT_NO, DEPT_NM, TEAM_NM) VALUES (3, '구매부서','구매1팀');
INSERT INTO TEST_DEPT (DEPT_NO, DEPT_NM, TEAM_NM) VALUES (4, '구매부서','구매2팀');

INSERT INTO TEST_DEPT (DEPT_NO, DEPT_NM, TEAM_NM) VALUES (5, '인사부서','인사팀');

 

 2). 테이블의 데이터를 읽어서 데이터를 입력할수 있는 SELECT  INSERT 방식도 있다.

INSERT INTO TEST_EMP (EMP_NO, EMP_ID, NAME, DEPT_NO) 
SELECT SEQ_TEST_EMP.NEXTVAL , 'etc' AS EMP_ID , NAME , DEPT_NO
  FROM TEST_EMP
 WHERE DEPT_NO = '2';

 

 

2. UPDATE - JOIN_DATE 에  입사일 데이터 등록하기.

UPDATE TEST_EMP SET JOIN_DATE = TO_DATE('20220101090000','YYYYMMDDHH24MISS')
 WHERE EMP_NO = 3;

 

3. MERGE 문 - 조건이 맞을경우, 아닐경우 분기 처리를 할수 있다.

 

1). 구매부서인경우 입사일자를 현재시간으로 업데이트처리

MERGE INTO TEST_EMP A
  USING  (
            SELECT DEPT_NO FROM TEST_DEPT
             WHERE DEPT_NM = '구매부서'
                ) B
    ON  (A.DEPT_NO = B.DEPT_NO AND A.EMP_NO > 10)
   WHEN MATCHED THEN 
         UPDATE SET A.JOIN_DATE = SYSDATE;

 

 

1). 인사부서인경우는 입사일자 현재로 업데이트, 아닌경우는 임직원으로 등록하기

MERGE INTO TEST_EMP A
  USING  (
               SELECT DEPT_NO FROM TEST_DEPT
                 WHERE DEPT_NM = '인사부서'
                ) B
    ON  (A.DEPT_NO = B.DEPT_NO AND A.EMP_NO > 10)
    WHEN MATCHED THEN 
                 UPDATE SET A.JOIN_DATE = SYSDATE
    WHEN NOT MATCHED THEN 
                 INSERT (EMP_NO, EMP_ID, NAME, DEPT_NO)
                  VALUES(SEQ_TEST_EMP.NEXTVAL, 'vip','인사팀장',B.DEPT_NO);

 

 

4. DELETE 문 - 해당하는 조건에 대한 데이터 삭제.

DELETE FROM TEST_EMP
 WHERE EMP_ID = 'etc';

 

 

 

 

728x90