-
Oracle | UPDATE 문법 총 정리! WHERE 조건, 서브쿼리, 여러개 실무 예제Brawny Develop/KR_Practical Development Basics_Quary 2025. 6. 19. 17:47
Oracle에서 UPDATE 문은 데이터 수정에 사용되는 가장 대표적인 DML 구문입니다.
하지만 WHERE 절 없이 실행하거나, JOIN 조건 없이 무턱대고 UPDATE를 하는 등
의외로 자주 실수되는 영역이기도 합니다.
이번 글에서는 기본 UPDATE 문법부터, 서브쿼리, SELECT 기반 UPDATE, 실수 방지 팁까지
실무에서 꼭 필요한 패턴들을 정리해보겠습니다.
📌 1. 기본 UPDATE 문 – 단일 조건으로 데이터 수정
UPDATE EMP
SET DEPT = '기획팀'
WHERE EMP_ID = 1001;
SET 절에는 수정할 컬럼과 새로운 값을 지정합니다.
반드시 WHERE 조건을 명시해 전체 데이터 수정 방지해야 합니다.
📌 2. 다중 컬럼 수정 – SET 절에 여러 항목 지정
UPDATE EMP
SET EMP_NAME = '김진우'
, DEPT = '개발팀'
WHERE EMP_ID = 1002;
여러 컬럼을 동시에 수정할 수 있으며, 콤마(,)로 구분합니다.
트랜잭션 단위로 처리되기 때문에 하나의 UPDATE로 처리하는 것이 유지보수에 유리합니다.
📌 3. SELECT 기반 UPDATE – 서브쿼리 활용
UPDATE EMP
SET DEPT = (
SELECT DEPT_NAME
FROM DEPT
WHERE DEPT.DEPT_ID = EMP.DEPT_ID
)
WHERE EXISTS (
SELECT 1 FROM DEPT WHERE DEPT.DEPT_ID = EMP.DEPT_ID
);
서브쿼리를 사용하면 다른 테이블에서 값을 가져와 수정할 수 있습니다.
EXISTS 절을 추가하면 서브쿼리가 유효한 경우에만 실행되므로
불필요한 수정 방지에 유리합니다.
이 패턴은 참조 테이블에서 부서명, 등급, 상태값 등을 실시간으로 반영할 때 유용합니다.
📌 4. JOIN을 이용한 UPDATE – MERGE 문 대안
Oracle에서는 ANSI JOIN 문법 기반 UPDATE가 공식적으로 지원되지 않기 때문에
복잡한 조인 조건이 필요한 경우 MERGE 문이나 WHERE EXISTS 또는 IN 절을 활용합니다.
UPDATE EMP E
SET DEPT = (
SELECT D.DEPT_NAME
FROM DEPT D
WHERE D.DEPT_ID = E.DEPT_ID
)
WHERE E.DEPT_ID IN (
SELECT DEPT_ID FROM DEPT
);
📌 5. 실수 방지 체크리스트
- WHERE 절 생략 전체 행 수정! 반드시 WHERE 조건 추가
- 서브쿼리 다중행 반환 ORA-01427: single-row subquery returns more than one row 에러 발생
- JOIN 조건 누락 잘못된 DEPT 값이 여러 행에 동일하게 들어갈 수 있음
- TRANSACTION 처리 수정 전 반드시 BEGIN TRANSACTION 또는 SAVEPOINT 고려'Brawny Develop > KR_Practical Development Basics_Quary' 카테고리의 다른 글
MyBatis SelectKey 사용법 | After, Before, 여러개 사용법 (0) 2025.07.08 mybatis foreach map key value 사용법 | List, 배열 (1) 2025.07.08 Oracle DECODE 여러개 조건, NULL, LIKE , CASE 문 비교 (0) 2025.07.08 Oracle TIMESTAMP로 커밋,삭제 이전 데이터 조회하는 방법 | Flashback 없이 이전 상태 확인하기 (0) 2025.06.25 Oracle | DML INSERT 문 제대로 쓰는 법? SELECT 기반 INSERT부터 다중 INSERT까지 전부 정리! (0) 2025.06.19