코딩 개발/ORACLE
[Oracle] MERGE INTO, USING ON, WHEN (NOT) MATCHED THEN
호소세
2024. 3. 29. 17:53
728x90
반응형
오늘은 oracle MERGE INTO 문에 대해서 알아보겠습니다.
MERGE INTO 문 작동방식
- MERGE INTO: 테이블 이름을 지정합니다.
- USING: 데이터를 가져올 테이블 또는 서브쿼리를 지정합니다.
- ON: 테이블과 USING 테이블을 연결하는 조건을 지정합니다.
- WHEN MATCHED THEN: ON 조건에 일치하는 행에 대해 수행할 작업을 지정합니다. 일반적으로 UPDATE 작업을 수행합니다.
- WHEN NOT MATCHED THEN: ON 조건에 일치하는 행이 없는 경우 수행할 작업을 지정합니다. 일반적으로 INSERT 작업을 수행합니다.
사실 이론적으로 말해도 예시를 안 보면 이해가 잘 안 되더라고요.(저는요)
그래서 예시를 한번 보겠습니다.
예시
EMPLOYEE 테이블
EMPLOYEE_ID | EMPLOYEE_NAME | DEPARTMENT_ID |
101 | John | 1 |
102 | Jane | 2 |
DEPARTMENT 테이블
DEPARTMENT_ID | DEPARTMENT_NAME |
1 | HR |
2 | Finance |
3 | IT |
예시 1
EMPLOYEE 테이블에 DEPARTMENT_NAME을 넣고
DEPARTMENT 테이블에 있는 DEPARTMENT_NAME으로 추가하고 싶을 때
어떻게 하면 좋을까요?
1. EMPLOYEE 테이블에 DEPARTMENT_NAME column을 추가합니다.
ALTER TABLE EMPLOYEE ADD DEPARTMENT_NAME VARCHAR(100);
2. MERGE INTO 문 사용
MERGE INTO EMPLOYEE E
USING DEPARTMENT D
ON (E.DEPARTMENT_ID = D.DEPARTMENT_ID)
WHEN MATCHED THEN
UPDATE SET E.DEPARTMENT_NAME = D.DEPARTMENT_NAME;
보시면
1. EMPLOYEE 테이블의 부서 ID와 DEPARTMENT 테이블의 ID가 같다는 조건이
2. MATCHED 되면 부서이름을 UPDATE 해라라는 문장입니다.
예시 2
이번에는 새로운 인원을 EMPLOYEE 테이블에 넣는 법을 알아보겠습니다.
MERGE INTO EMPLOYEE E USING (
SELECT
103 AS EMPLOYEE_ID,
'호소세' AS EMPLOYEE_NAME,
3 AS DEPARTMENT_ID,
'IT' AS DEPARTMENT_NAME
FROM
DUAL
) D ON (E.EMPLOYEE_ID = D.EMPLOYEE_ID)
WHEN NOT MATCHED THEN
INSERT
(
EMPLOYEE_ID,
EMPLOYEE_NAME,
DEPARTMENT_ID,
DEPARTMENT_NAME
)
VALUES
(
D.EMPLOYEE_ID,
D.EMPLOYEE_NAME,
D.DEPARTMENT_ID,
D.DEPARTMENT_NAME
);
DUAL 테이블을 이용해서 MERGE 문을 많이 사용하더라고요.
1. EMPLOYEE 테이블에 저 인원이 있는지 없는지 확인하는 조건문 작성
2. 조건이 맞지 않으면 EMPLOYEE 테이블에 인원을 추가하게 됩니다.
EMPLOYEE_ID | EMPLOYEE_NAME | DEPARTMENT_ID | DEPARTMENT_NAME |
101 | John | 1 | HR |
102 | Jane | 2 | Finance |
103 | 호소세 | 3 | IT |
이런 식으로 추가가 될 겁니다.
이렇게 해서 조건문에 따른 동작을 설정하면 됩니다.
소감
우사인볼트가 이런 말을 했습니다. '나는 고작 몇 초를 위해서 4년을 연습하는데 사람들은 2개월하고 성과가 안나온다고 포기한다.'
저도 성과가 안나온다고 포기하지 않을 것이고, 계단식 성장을 한다고 생각할 것입니다. 여러분도 열심히 하다보면 언젠가는 멋진 사람이 되지 않을까 생각합니다.
반응형