본문 바로가기
Database

오라클 UPDATE로 데이터 수정하기

by 굿센스굿 2024. 12. 3.
반응형


UPDATE
 명령어는 데이터베이스에서 특정 조건에 맞는 데이터를 수정할 때 사용됩니다. 오라클 DB에서 UPDATE는 테이블의 기존 데이터를 업데이트하거나 수정하는 기본적인 SQL 명령어 중 하나입니다. 이번 글에서는 UPDATE 구문의 기본 사용법과 함께 실무 예제를 통해 효과적으로 데이터를 수정하는 방법을 살펴보겠습니다.


1. UPDATE 구문의 기본 구조

UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE 조건;
  • 테이블명: 데이터를 수정할 대상 테이블의 이름.
  • SET: 수정하려는 열과 해당 열에 설정할 새 값을 지정.
  • WHERE: 수정할 데이터를 특정하는 조건. 이 조건을 지정하지 않으면 테이블의 모든 행이 수정되므로 주의가 필요합니다.

2. UPDATE의 기본 사용법

1) 단일 행 업데이트

UPDATE employees
SET salary = 5000
WHERE employee_id = 101;
  • 설명: 직원 ID가 101인 직원의 급여를 5000으로 업데이트합니다.

2) 다중 열 업데이트

UPDATE employees
SET salary = 6000, job_id = 'IT_PROG'
WHERE employee_id = 102;
  • 설명: 직원 ID가 102인 직원의 급여를 6000으로, 직무 ID를 'IT_PROG'로 업데이트합니다.

3) 모든 행 업데이트 (조건 없이)

UPDATE employees
SET department_id = 50;
  • 설명: 테이블의 모든 행에 대해 department_id를 50으로 설정합니다.
  • 주의: WHERE 절을 생략하면 모든 데이터가 수정되므로 신중히 사용해야 합니다.

3. UPDATE와 서브쿼리 사용

UPDATE 문에서 서브쿼리를 활용하면 다른 테이블의 값을 기반으로 데이터를 수정할 수 있습니다.

예시 1: 다른 테이블의 값을 참조하여 수정

UPDATE employees
SET salary = (SELECT AVG(salary)
              FROM employees
              WHERE department_id = 10)
WHERE department_id = 20;
  • 설명: 부서 ID가 20인 직원들의 급여를 부서 ID가 10인 직원들의 평균 급여로 수정합니다.

예시 2: 최대값이나 최소값 활용

UPDATE products
SET price = (SELECT MAX(price)
             FROM products)
WHERE category_id = 101;
  • 설명: 카테고리 ID가 101인 제품들의 가격을 해당 테이블의 최대 가격으로 수정합니다.

4. 실무에서의 활용 사례

사례 1: 특정 상태 변경

UPDATE orders
SET order_status = 'SHIPPED'
WHERE order_date < TO_DATE('2023-01-01', 'YYYY-MM-DD')
  AND order_status = 'PENDING';
  • 설명: 2023년 1월 1일 이전에 생성된 주문 중 상태가 'PENDING'인 주문을 'SHIPPED'로 변경합니다.

사례 2: 고객 등급 업데이트

UPDATE customers
SET membership_tier = 'GOLD'
WHERE total_spent > 10000;
  • 설명: 총 구매 금액이 10,000 이상인 고객의 멤버십 등급을 'GOLD'로 업그레이드합니다.

사례 3: 부서 이동 처리

UPDATE employees
SET department_id = 20
WHERE department_id = 10
  AND job_id = 'SA_REP';
  • 설명: 부서 ID가 10이고 직무가 'SA_REP'인 직원들을 부서 ID 20으로 이동시킵니다.

5. 트랜잭션과 UPDATE

오라클 DB는 트랜잭션을 통해 데이터의 무결성을 보장합니다. UPDATE는 변경된 데이터가 즉시 적용되지 않고, COMMIT을 통해 확정됩니다. 이를 통해 실수로 데이터를 잘못 수정했을 때 ROLLBACK으로 복구할 수 있습니다.

예시

BEGIN;

UPDATE employees
SET salary = salary * 1.10
WHERE department_id = 30;

-- 변경 사항을 확정
COMMIT;

-- 또는 변경 사항 취소
-- ROLLBACK;

6. UPDATE와 JOIN

오라클 DB에서는 UPDATE 문에서도 조인을 사용할 수 있습니다. 다른 테이블의 데이터를 참조하거나 결합하여 데이터를 수정할 때 유용합니다.

예시: 조인을 활용한 업데이트

UPDATE employees E
SET salary = salary * 1.05
WHERE EXISTS (SELECT 1
              FROM departments D
              WHERE E.department_id = D.department_id
              AND D.location_id = 1700);
  • 설명: location_id가 1700인 부서에 소속된 직원들의 급여를 5% 인상합니다.

7. 조건문을 활용한 UPDATE (CASE 문)

CASE 문을 사용하면 조건에 따라 다른 값을 설정할 수 있습니다.

UPDATE employees
SET salary = CASE 
               WHEN job_id = 'IT_PROG' THEN salary * 1.10
               WHEN job_id = 'HR_REP' THEN salary * 1.05
               ELSE salary
             END;
  • 설명: 직무가 'IT_PROG'인 직원은 급여를 10% 인상하고, 'HR_REP'인 직원은 5% 인상합니다. 다른 직무의 급여는 변경하지 않습니다.

8. 대량 데이터 업데이트 주의점

1) 성능 문제

  • UPDATE는 많은 데이터를 수정할 경우 성능에 영향을 미칠 수 있습니다.
  • 해결 방법: WHERE 절로 데이터를 제한하거나, 트랜잭션을 분할합니다.

2) 잠금(Locking) 문제

  • UPDATE 실행 중 다른 사용자가 테이블에 접근하면 대기 상태가 발생할 수 있습니다.
  • 해결 방법: 트랜잭션 처리 시간을 최소화하거나, 적절한 격리 수준을 설정합니다.

9. 마무리

오라클 DB의 UPDATE는 데이터 수정의 핵심 도구로, 다양한 상황에서 효율적으로 데이터를 갱신할 수 있습니다.

  1. 기본적인 사용법을 이해한 뒤,
  2. 서브쿼리와 JOIN, CASE 문을 활용하면 더 정교한 데이터 수정이 가능합니다.
  3. 대량 데이터 수정 시 성능과 잠금 문제를 고려하여 트랜잭션을 관리하는 것이 중요합니다.

실제 데이터베이스 환경에서 UPDATE를 실습하며 이해를 더 깊게 해보세요!

반응형