반응형
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는 데이터 수정의 핵심 도구로, 다양한 상황에서 효율적으로 데이터를 갱신할 수 있습니다.
- 기본적인 사용법을 이해한 뒤,
- 서브쿼리와 JOIN, CASE 문을 활용하면 더 정교한 데이터 수정이 가능합니다.
- 대량 데이터 수정 시 성능과 잠금 문제를 고려하여 트랜잭션을 관리하는 것이 중요합니다.
실제 데이터베이스 환경에서 UPDATE를 실습하며 이해를 더 깊게 해보세요!
반응형
'Database' 카테고리의 다른 글
오라클 COMMIT과 ROLLBACK을 활용한 트랜잭션 관리 (0) | 2024.12.03 |
---|---|
오라클 DELETE를 활용한 데이터 삭제 (0) | 2024.12.03 |
오라클 DB에서 INSERT INTO로 데이터 추가하기 (0) | 2024.12.03 |
오라클 DROP TABLE로 테이블 삭제하기 (0) | 2024.12.03 |
오라클 ALTER TABLE로 테이블 수정하기 (0) | 2024.12.03 |