데이터베이스를 다루다 보면, 종종 여러 테이블을 조합해서 특정 데이터를 업데이트해야 하는 상황이 생기곤 해요.
오늘은 오라클의 emp와 dept테이블을 조인하여 업데이트 하는 방법에 대해 안내해드리려고 해요! dept 테이블의 deptno 값에 따라 emp테이블의 comm 컬럼 값을 업데이트하는 방법으로 예제를 보여드릴게요. 😊
업데이트를 위한 SQL 예제
UPDATE
(SELECT e.comm,
CASE d.deptno
WHEN 20 THEN 1
WHEN 30 THEN 2
WHEN 40 THEN 3
ELSE 4
END AS upd
FROM emp e
INNER JOIN dept d
ON e.deptno = d.deptno
WHERE e.comm IS NULL) subquery
SET subquery.comm = subquery.upd;
쿼리 동작 설명~
- 조인(inner join)
emp와dept테이블을deptno라는 공통 키를 기준으로 묶어요. 서로 연관된 데이터를 한 번에 처리할 수 있지요. - 조건 필터링
업데이트는comm컬럼이 비어있는(NULL) 직원 데이터에만 적용하겠습니다. - CASE 문 활용
deptno값에 따라 업데이트할 값을 임의로 설정할게요.- 부서 번호가 20이면
comm은 1 - 부서 번호가 30이면
comm은 2 - 부서 번호가 40이면
comm은 3 - 그 외에는 4로 설정됩니다.
- 부서 번호가 20이면
- SET 구문
위에서 정리된 값을 기반으로emp테이블의comm값을 업데이트합니다.
실행 결과는 어떻게 될까요?
이 쿼리를 실행하면, comm 컬럼이 비어 있는 직원들에 대해 다음과 같은 업데이트가 이루어져요
- 부서 번호 20 →
comm= 1 - 부서 번호 30 →
comm= 2 - 부서 번호 40 →
comm= 3 - 그 외 부서 →
comm= 4
SELECT * FROM EMP ORDER BY ENAME;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7876 ADAMS CLERK 7788 87/07/13 1100 1 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7698 BLAKE MANAGER 7839 81/05/01 2850 2 30
7782 CLARK MANAGER 7839 81/06/09 2450 4 10
7902 FORD ANALYST 7566 81/12/03 3000 1 20
7900 JAMES CLERK 7698 81/12/03 950 2 30
7566 JONES MANAGER 7839 81/04/02 2975 1 20
7839 KING PRESIDENT 81/11/17 5000 4 10
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7934 MILLER CLERK 7782 82/01/23 1300 4 10
7788 SCOTT ANALYST 7566 87/07/13 3000 1 20
7369 SMITH CLERK 7902 80/12/17 800 1 20
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
14 개의 행이 선택되었습니다.
이렇게 하여 조인으로 테이블을 업데이트 하는 방법을 알아보았는데요, 🎉 필요한 부분을 응용해서 여러분의 데이터베이스 작업에도 활용해 보세요~ 😊
