더북(TheBook)

조건에 따른 다중 INSERT

이번에는 다중 테이블 INSERT 구문에 조건절을 추가하고 서브 쿼리도 활용해 조건에 따라 데이터를 입력해 보도록 하자. 먼저 이전에 사용했던 두 테이블을 깨끗이 비우자.

입력

    TRUNCATE TABLE ex7_3;

결과

    table EX7_3이(가) 잘렸습니다.

입력

    TRUNCATE TABLE ex7_4;

결과

    table EX7_4이(가) 잘렸습니다.

이번에는 서브 쿼리를 사용할 것이므로 사원 테이블에서 부서번호가 30번과 90번에 속하는 사원의 사번과 이름을 선택해 30번 부서 사원들은 ex7_3 테이블에, 90번 부서 사원들은 ex7_4 테이블에 INSERT 하는 구문을 만들어 보자.

입력

    INSERT ALL
      WHEN department_id = 30 THEN
      INTO ex7_3 VALUES (employee_id, emp_name)
      WHEN department_id = 90 THEN
      INTO ex7_4 VALUES (employee_id, emp_name)
    SELECT department_id,
           employee_id, emp_name
     FROM  employees;

결과

    9개 행 이(가) 삽입되었습니다.

두 테이블의 데이터를 확인해 보면 성공적으로 입력된 것을 볼 수 있다. 첫 번째 WHEN 조건에서 부서번호가 30인지 체크해 이에 해당하는 로우는 ex7_3 테이블에 들어가고, 두 번째 WHEN 조건에서 부서번호가 90인지 체크해 이에 해당하는 로우는 ex7_4 테이블에 입력된다. 그렇다면 나머지 부서의 사원들은 어떻게 될까? 나머지 부서 사원들에 대한 조건이 없으므로 아무 일도 일어나지 않는다. 만약 나머지 부서원들을 별도의 테이블에 넣고 싶다면 ELSE 절을 명시하면 된다. 먼저 ex7_5 테이블을 만들자.

입력

    CREATE TABLE ex7_5 (
           emp_id    NUMBER,
           emp_name  VARCHAR2(100));

결과

    table ex7_5이(가) 생성되었습니다.

이제 ELSE 절을 추가해 나머지 부서 사원들은 ex7_5 테이블에 넣어 보자.

입력

    INSERT ALL
      WHEN department_id = 30 THEN
        INTO ex7_3 VALUES (employee_id, emp_name)
      WHEN department_id = 90 THEN
        INTO ex7_4 VALUES (employee_id, emp_name)
      ELSE
        INTO ex7_5 VALUES (employee_id, emp_name)
    SELECT department_id,
           employee_id, emp_name
     FROM  employees;

결과

    107개 행 이(가) 삽입되었습니다.

총 107개의 행이 입력되었다. 즉 사원 테이블 전체 건수가 예제 테이블에 나뉘어 들어간 것이다.

입력

    SELECT COUNT(*)
      FROM EX7_5;

결과

    COUNT(*)
    ----------
            98

그리고 데이터를 확인해 보면 예상한 대로 30과 90 부서에 속하지 않은 사원들은 모두 ex7_5 테이블에 입력된 것을 알 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.