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개월하고 성과가 안나온다고 포기한다.'
저도 성과가 안나온다고 포기하지 않을 것이고, 계단식 성장을 한다고 생각할 것입니다. 여러분도 열심히 하다보면 언젠가는 멋진 사람이 되지 않을까 생각합니다.
반응형
'코딩 개발 > ORACLE' 카테고리의 다른 글
[ORACLE] DECODE, TO_CHAR(요일), TO_DATE (0) | 2024.02.20 |
---|---|
[ORACLE] ROWNUM, ROW_NUMBER(), ORDER BY 여러개 알아보기 (0) | 2023.09.26 |
[Oracle] INSTR 함수 (In String) (0) | 2023.09.24 |
[ORACLE] - NVL, NVL2 함수 (Null Value) (0) | 2023.09.24 |
DBeaver - CSV 파일 내보내기 및 한글 깨짐 이슈 해결 (1) | 2023.08.30 |