MERGE는 조건을 비교해서 해당 조건에 맞는 데이터가 없으면 데이터를 삽입하고,
조건에 맞는 데이터가 있으면 기존의 데이터를 수정하는 문장이다.
MERGE는 어떤 경우에 쓰일까?
두개의 테이블의 내용을 비교하여 한쪽에서 다른쪽에 가져오고싶은 데이터가 있을때 사용한다.
A테이블과 B테이블이 있을때 조건에 해당하는 데이터가 있을 경우 수정을, 데이터가 없을 경우 데이터를 입력한다.
모든 정보를 가진 테이블, 데이터가 부족한 테이블을 만들어 MERGE로 부족한 데이터를 추가해보자.
1. CREATE TABLE로 TABLE_A_CUSTOMER 테이블을 생성한다.
CREATE TABLE TABLE_A_CUSTOMER ( CUSTOMER_CD CHAR(7) PRIMARY KEY, CUSTOMER_NM VARCHAR2(9) NOT NULL, PHONE_NUMBER VARCHAR2(16) ); |
2. INSERT로 TABLE_A_CUSTOMER 테이블에 데이터를 삽입한다.
INSERT INTO TABLE_A_CUSTOMER(customer_cd,customer_nm,phone_number) VALUES(1372321,’황소윤’,’010-3432-3267’); INSERT INTO TABLE_A_CUSTOMER(customer_cd,customer_nm,phone_number) VALUES(1372456,’최정훈’,’010-9843-1247’); |
3. TABLE_B_CUSTOMER 테이블을 생성한다.
CREATE TABLE TABLE_B_CUSTOMER ( CUSTOMER_CD CHAR(7) PRIMARY KEY, CUSTOMER_NM VARCHAR2(9) NOT NULL, PHONE_NUMBER VARCHAR2(16) ); |
4. TABLE_B_CUSTOMER 테이블에 데이터를 삽입한다.
INSERT INTO TABLE_B_CUSTOMER(customer_cd,customer_nm,phone_number) VALUES(1372321,’황소윤’,’’); INSERT INTO TABLE_B_CUSTOMER(customer_cd,customer_nm,phone_number) VALUES(1372456,’최정훈’,’010-9843-1247’); |
황소윤의 휴대폰 번호는 설정하지 말고 MERGE로 추가해보자.
황소윤의 phone_number는 NULL로 설정한다.(비워둔다.) 문자열의 NULL표현은 ’’(작은 따옴표 두개)로 한다.
5. 두 테이블의 데이터를 확인한다.
SELECT* FROM TABLE_A_CUSTOMER; SELECT* FROM TABLE_B_CUSTOMER; |
TABLE_A_CUSTOMER에는 황소윤의 전화번호가 있고
TABLE_B_CUSTOMER에는 황소윤의 전화번호가 없다.
6. 두 테이블을 MERGE 시킨다.
MERGE INTO TABLE_B_CUSTOMER B USING TABLE_A_CUSTOMER A ON (B.CUSTOMER_CD = A.CUSTOMER_CD) WHEN MATCHED THEN UPDATE SET B.CUSTOMER_NM = B.CUSTOMER_NM, B.PHONE_NUMBER = A.PHONE_NUMBER WHEN NOT MATCHED THEN INSERT(B.CUSTOMER_CD,B.CUSTOMER_NM,B.PHONE_NUMBER) VALUES(A.CUSTOMER_CD,A.CUSTOMER_NM,A.PHONE_NUMBER); |
TABLE_A_CUSTOMER 테이블과 TABLE_B_CUSTOMER 테이블을 비교하여 데이터가 있을 경우 추가하도록 만든다.
USING 옆에는 INSER 또는 UPDATE할 결과를 쓴다.
ON 옆에는 SELECT한 결과와 입력할 테이블의 UNIQUE한 값(중복되지않는다는 뜻) 을 연결해준다.
WHEN MATCHED THEN 옆에는 SELECT의 결과가 INSERT할 테이블에 값이 이미 있다면 UPDATE 실행한다.
WHEN NOT MATCHED THEN 옆에는 ON절에 정한 조건과 맞지 않다면 INSERT 할 컬럼과 값을 보여준다.
7. 추가된 데이터를 확인한다.
SELECT* FROM TABLE_B_CUSTOMER; |
NULL값이었던 황소윤의 전화번호 데이터가 추가되었다.
'데이터베이스' 카테고리의 다른 글
[mariaDB] 서버 접속 권한 설정 (0) | 2022.08.03 |
---|---|
[DB]무결성 제약 조건 (0) | 2021.10.04 |
[DB]Equi Join으로 테이블을 조인시켜보자 (0) | 2021.10.03 |
[DB]테이블 UPDATE 하기 (0) | 2021.10.01 |
[DB]INSERT로 테이블에 내용을 추가하기 (0) | 2021.09.30 |