안녕하세요~
오늘은 다중 INSERT문에 대해 알아보겠습니다.
사용법을 알아보기 전 의미를 알아볼까요?
다중 INSERT문이란?
데이터를 입력할 때 여러 개의 테이블에
동시에 데이터를 입력할 수 있게 해주는 INSERT문입니다.
다중 테이블 INSERT 구문:
INSERT [ALL | FIRST] [WHEN condition THEN] [insert_into_clause values_clause] [ELSE] [insert_into_clause values_clause] (subquery) |
우선 공통적으로 INSERT ... SELECT 문을 사용하여 행을
단일 DML 문의 일부로 다중 테이블에 삽입합니다.
다중 INSERT 문의 종류는 4가지로 나눌 수 있습니다.
1. 무조건 ALL INSERT 문: ALL into_clause 2. 조건부 ALL INSERT 문: conditional_insert_clase 3. 조건부 FIRST INSERT 문: FIRST conditional_insert_clase 4. PIVOTING INSERT 문 (pivot함수를 사용하지 않고 pivot의 효과를 냄)
|
예제를 통해 알아봅시다!
우선 이미 고객 테이블이 존재한다고 가정합시다.
[ 고객 테이블 ]
고객이름 | 나이 | 주소 | 총구매액 | 추천인 |
A | 24 | 서울 | 30000 | null |
B | 29 | 서울 | 10000 | A |
C | 26 | 파주 | 25000 | A |
D | 31 | 제주 | 1000 | B |
E | 19 | null | 15000 | C |
예제1.
주소가 서울인 사람과 파주인 사람, 제주인 사람을
각각 고객_서울, 고객_파주, 고객_제주 테이블에 한번에 입력하세요.
(단, 고객_서울, 고객_파주, 고객_제주 테이블은 이미 존재한다고 가정)
앞서 사용한 SQL문이 바로 조건부 ALL INSERT 문입니다.
예제2.
우리의 타겟 고객은 20-30대이다.
나이가 30 이상 39 이하인 고객은 고객_30 테이블에,
나이가 20 이상 29 이하인 고객은 고객_20 테이블에,
그외의 고객은 고객_예외 테이블에 한번에 입력하세요.
(여기서도 이미 각각의 테이블 구조는 존재한다고 가정)
첫 번째 WHEN 절이 TRUE로 평가되면 ORACLE 서버가 해당 INTO절을 실행합니다.
후속 WHEN 절에서는 위의 행을 건너뛰고 실행합니다.
예제3. 아래와 같은 테이블이 있다고 가정하자
[고객_나이]
주소 | UNDER_30 | UNDER_40 | OTHER |
서울 | 30000 |
|
|
서울 | 10000 |
|
|
파주 | 25000 |
| |
제주 |
| 1000 |
|
null |
|
| 15000 |
(Create 시 sql keyword 주의하기: 예, others)
pivoting insert문을 이용하여
나이대에 대한 정보(주소, 총구매액)를 테이블의 data로 만드세요
(고객2 테이블에 INSERT하세요)
무조건 INSERT ALL문으로 PIVOTING 작업을 하였습니다.
PIVOTING INSERT 문은 컬럼이 데이터가 되어 INSERT가 되는 구문입니다.
[결과]
주소 |
나이 |
총구매액 |
서울 |
UNDER_30 |
30000 |
서울 |
UNDER_30 |
100000 |
파주 |
UNDER_30 |
25000 |
제주 |
UNDER_30 |
(NULL) |
(NULL) |
UNDER_30 |
(NULL) |
서울 |
UNDER_40 |
(NULL) |
서울 |
UNDER_40 |
(NULL) |
파주 |
UNDER_40 |
(NULL) |
제주 |
UNDER_40 |
1000 |
(NULL) | UNDER_40 | (NULL) |
... | OTHER | (NULL) |
추가) PIVOTING은 데이터 분석을 위해 수집된 데이터가 엑셀형태일 경우
DB 에 저장해서 분석하고자 할 때 유용하게 사용할 수 있습니다
오늘은 여기까지!
내일 또 돌아올겠습니다.
이 글이 도움되셨다면 아래 공감 꾹~
'SQL' 카테고리의 다른 글
ORACLE SQL 튜닝 | 인덱스 튜닝 ( index skip scan, index full scan, index fast full scan) (2) | 2018.04.19 |
---|---|
ORACLE | 정규식 함수(regular expression) (0) | 2018.04.18 |
ORACLE | 치환변수(&) 사용하는 방법 (0) | 2018.04.16 |
ORACLE | 인덱스 (INDEX) (2) | 2018.04.12 |
ORACLE | VIEW(뷰) (0) | 2018.04.11 |