본문 바로가기
DataBase/Oracle

[Oracle] 오라클 UPDATE 방법 및 예제 (기존 데이터 수정)

by 알쓸전잡 2025. 8. 3.
반응형

오라클을 사용할 때 알고 있지만 가끔 헷갈리는 UPDATE 기본 사용 방법과 활용 방법을 예제와 같이 알려 드리겠습니다. 

오라클 기본 UPDATE
오라클 기본 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 사용 방법은 다음 글에서 작성하겠습니다.

반응형