데이터베이스 다중 (테이블) 인서트
다중 (테이블) 인서트
지난번에 insert문에 대해서 학습하였다. 이번엔 다중 insert에 대해서 공부하도록 하자. 다중 insert는 기본적으로 서브쿼리를 사용한다. 그리고 세 가지로 분류된다.
- 무조건 insert
- 조건부 insert
- 조건부 insert first
무조건 insert
먼저 무조건 insert에 대해서 공부하도록 하자. 이를 학습하기 위해서 먼저 테이블을 2개를 생성한다.
그리고 서브 쿼리를 통해서 emp 테이블에서 부서번호가 10인 데이터에 대해 t1과 t2로 해당하는 값들을 넣어준다.
결과적으로 부서번호가 10인 행 데이터가 3개이기 때문에 각 각에 3개씩 행 데이터가 입력된다.
조건 insert
이번에는 조건 insert에 대해서 연습해보자. 방금 insert를 수행했던 테이블 두 개를 다시 초기화하자.
이번에는 조건절을 이용할 것이다. 이 때 when을 사용하도록 하겠다. 이를 통해서 첫 번째 테이블에는 81년 이후의 입사한 사원 데이터만을 저장하고, 두 번째 테이블에서는 임금이 3000 이상인 사원에 대해서만 데이터를 입력받도록 하겠다.
동작은 간단하다. 일단 select문을 통해 데이터를 선택하면 이를 when절에 보내 조건 검사를 수행한다. 그리고 조건을 충족할 경우 테이블에 집어넣는다.
결과적으로 이번엔 t1 테이블에는 11개의 데이터가 입력되었고, t2 테이블은 한 개의 데이터만을 입력받았다.
조건부 insert first
테이블을 세 개 만들도록 하자.
insert first는 프로그래밍에서 다루는 if, else if 문이라고 생각하면 쉽다. 즉 방금 다뤘던 조건 insert에서는 모든 when절에 select한 데이터가 들어가서 조건 검사를 거친다. 하지만 insert first에서는 첫 번째 when절에서 true가 되어 테이블로 입력된다면 다음 when절에서 조건 검사를 해당 행 데이터에 대해서 진행하지 않는다. 따라서 복사하는 테이블로부터 데이터의 조건에 따라 여러 테이블로 분류를 하는데 사용할 수 있다.
위에서 만들었던 테이블 3개에 데이터를 분류해서 입력하는 insert문을 작성해보도록 하자. 임금에 따라 1000이하라면 sal1000, 3000이하라면 sal3000, 나머지는 salmax로 집어넣도록 하자.
데이터를 확인해보면, 조건에 따라 데이터가 잘 분류되고 있는 것을 확인할 수 있다.
이번에는 입사년도별 데이터 테이블을 만들어보도록 하겠다.
80년 - emp80
81년 - emp81
82년 - emp82
나머지 - emp90
이렇게 4 개의 테이블을 생성하고 각 각 사원번호, 사원 이름, 임금, 입사일 데이터를 집어넣도록 하자.
이를 위해서 날짜 데이터를 hiredate와 비교하는 insert first문을 다음과 같이 작성한다.
결과적으로 제대로 출력되고 있음을 볼 수 있다.
댓글
댓글 쓰기