오라클을 사용할 때 알고 있지만 가끔 헷갈리는 UPDATE 기본 사용 방법과 활용 방법을 예제와 같이 알려 드리겠습니다.
UPDATE 기본 사용 방법
UPDATE DEPT
SET DNAME = 'BUSINESS'
, LOCATION = 'BUSAN'
WHERE DEPTNO = '30'
UPDATE [테이블 명] SET [컬럼1] = [값1], [컬럼2] = [값2], ...... WHERE 조건
위의 예제가 UPDATE를 하기 위한 기본 방법으로 변경하고자 하는 컬럼과 조건을 확실하게 명시해야 합니다.
※ 컬럼의 속성과 변경하고자 하는 값의 데이터 형식은 동일해야 합니다.
SET에 서브쿼리 사용
UPDATE EMP A
SET SAL = (SELECT AVG(B.SAL) FROM EMP B WHERE A.DEPTNO = B.DEPTNO)
, COMM = (SELECT AVG(NVL(B.COMM,0)) FROM EMP B WHERE A.DEPTNO = B.DEPTNO)
WHERE DEPTNO = '30'
컬럼에 대입되는 값에는 위의 예제와 같이 서브쿼리로 대체 가능합니다.
이 방법을 사용하면 테이블에 있는 값을 불러와서 UPDATE 가 가능합니다.
UPDATE EMP A
SET (SAL, COMM) = (SELECT AVG(B.SAL), AVG(NVL(B.COMM,0))
FROM EMP B
WHERE A.DEPTNO = B.DEPTNO)
WHERE DEPTNO = '30'
서브쿼리에서 불러오는 값이 여러 개인 경우는 괄호를 사용해서 묶음 지정하여 한번에 UPDATE 할 수 있습니다.
조건절(WHERE)에 서브쿼리 사용
UPDATE EMP A
SET JOB = 'CLERK'
WHERE 2 = (SELECT C.GRADE
FROM SALGRADE C
WHERE A.SAL BETWEEN C.LOSAL AND C.HISAL)
SET에서 변경되는 값을 지정해주는것도 중요하지만, 조건을 제대로 설정하지 않으면 엉뚱한 값이 변경됩니다.
UPDATE 대상인 테이블에서 조건을 지정할 수 있으면 좋겠지만 다른 테이블을 참조해야 하는 경우 예제처럼 서브쿼리를 사용하면 됩니다.
UPDATE EMP A
SET JOB = 'CLERK'
WHERE DEPTNO IN (SELECT B.DEPTNO
FROM DEPT B
WHERE B.LOCATION IN ('DALLAS','CHICAGO'))
비교해서 변경하고자 하는 값이 여러개인 경우 = 가 아닌 IN 을 사용하면 됩니다.
UPDATE EMP A
SET JOB = 'CLERK'
WHERE EXISTS (SELECT *
FROM DEPT B
WHERE B.LOCATION IN ('DALLAS','CHICAGO')
AND A.DEPTNO = B.DEPTNO)
테이블에서 UPDATE 대상이 되는 값이 많은 경우 IN을 사용하면 성능이 저하됩니다.
100개 이상의 데이터를 비교하는 경우 EXISTS 사용을 권장합니다.
※ IN은 모든 값(행)을 비교해서 포함, 미포함 여부를 확인하지만 EXISTS는 매칭되는 값(행)이 발견되면 비교를 멈추고 다음 값과의 포함, 미포함 여부를 확인합니다.
- IN은 100개를 다 맞춰본다 하면, EXISTS는 100개 중 20번째에서 매칭이 되면 멈춤
UPDATE 에서 서브쿼리 사용은 이 정도로 가능하지만, 복잡한 쿼리에서 값을 추출하여 UPDATE를 수행하고 싶다면 MERGE INTO 를 사용해야 합니다.
MERGE INTO 사용 방법은 다음 글에서 작성하겠습니다.
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 오라클 프로시저, 함수, 패키지 내용으로 검색 방법 및 예제 (조건, 주석 키워드로 찾기) (2) | 2025.08.14 |
---|---|
[Oracle] 오라클 조인 종류별 개념 및 상황별 활용 예시 (Oracle JOIN , ANSI JOIN) (3) | 2025.08.13 |
[Oracle] 오라클 INSERT 방법 및 예제 (신규 데이터 생성) (1) | 2025.07.31 |
[Oracle] 오라클 서브 쿼리 종류 및 사용법, 예시 (스칼라 서브 쿼리, 인라인 뷰, 중첩 서브 쿼리) (4) | 2025.07.29 |
[Oracle] 오라클 SQL 종류 및 개념 정리 (DDL, DML, DCL) (0) | 2025.07.20 |