Oracle에서 UPDATE 문은 테이블의 기존 데이터를 수정할 때 사용됩니다. 기본적으로 UPDATE
문은 특정 조건에 맞는 레코드의 특정 컬럼 값을 업데이트할 수 있습니다. 구문과 함께 다양한 예제를 보여드릴게요.
기본 구문
UPDATE 테이블명
SET 컬럼명 = 값
[WHERE 조건];
테이블명
: 데이터를 수정할 테이블 이름입니다.SET
: 수정할 컬럼과 값을 지정합니다.WHERE
: 조건에 따라 특정 레코드를 선택합니다. 이 조건이 없으면 모든 레코드가 업데이트되므로 주의가 필요합니다.
예제 1: 기본적인 UPDATE 문 사용
다음은 employees
테이블에서 employee_id
가 100인 직원의 salary
를 5000으로 수정하는 예제입니다.
UPDATE employees
SET salary = 5000
WHERE employee_id = 100;
- 설명:
employee_id
가 100인 레코드의salary
값을 5000으로 변경합니다.
예제 2: 여러 컬럼을 동시에 업데이트
SET
절에 여러 컬럼을 지정하여 한 번에 여러 컬럼 값을 수정할 수 있습니다.
UPDATE employees
SET salary = 6000,
job_id = 'SA_REP'
WHERE employee_id = 101;
- 설명:
employee_id
가 101인 직원의salary
를 6000으로,job_id
를 ‘SA_REP’로 업데이트합니다.
예제 3: 여러 레코드 조건에 맞춰 업데이트
다음은 department_id
가 10인 모든 직원의 salary
를 10% 증가시키는 예제입니다.
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 10;
- 설명:
department_id
가 10인 모든 레코드의salary
값을 10% 증가시킵니다.
예제 4: 서브쿼리와 함께 UPDATE 사용
다른 테이블의 데이터를 참조하여 업데이트할 수도 있습니다. 예를 들어, departments
테이블에서 department_name
이 ‘Sales’인 부서의 department_id
를 찾아, 그 부서의 모든 직원 salary
를 7000으로 수정합니다.
UPDATE employees
SET salary = 7000
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
- 설명:
departments
테이블에서department_name
이 ‘Sales’인department_id
를 조회하고, 해당 부서에 소속된 직원들의salary
를 7000으로 변경합니다.
예제 5: CASE 문을 이용한 조건별 UPDATE
CASE
문을 활용해 여러 조건에 따라 다르게 값을 수정할 수 있습니다. 예를 들어, 직원의 department_id
에 따라 salary
를 다르게 수정하는 경우입니다.
UPDATE employees
SET salary = CASE
WHEN department_id = 10 THEN salary * 1.1
WHEN department_id = 20 THEN salary * 1.2
ELSE salary * 1.05
END;
- 설명:
department_id
가 10이면salary
를 10% 증가시키고, 20이면 20% 증가, 그 외의 경우에는 5% 증가시킵니다.
예제 6: 전체 레코드 업데이트
WHERE
절을 생략하면 모든 레코드가 수정됩니다. 예를 들어, employees
테이블의 모든 직원의 bonus
컬럼을 100으로 초기화하는 경우입니다.
UPDATE employees
SET bonus = 100;
- 주의:
WHERE
절을 생략하면 테이블의 모든 레코드가 업데이트되므로, 항상 신중하게 사용해야 합니다.
예제 7: COMMIT과 ROLLBACK
Oracle은 기본적으로 자동 커밋이 아닙니다. 따라서 UPDATE
문을 실행한 후 COMMIT을 통해 변경 사항을 저장하거나, ROLLBACK을 통해 취소할 수 있습니다.
UPDATE employees
SET salary = 7000
WHERE employee_id = 102;
COMMIT; -- 변경 사항 저장
UPDATE employees
SET salary = 8000
WHERE employee_id = 103;
ROLLBACK; -- 변경 사항 취소
- 설명: 첫 번째 예제에서는
employee_id
가 102인 직원의salary
를 7000으로 변경하고 저장합니다. 두 번째 예제에서는employee_id
가 103인 직원의salary
를 8000으로 변경했지만,ROLLBACK
으로 취소합니다.
예제 8: UPDATE와 JOIN 사용 (MERGE INTO 사용 예시)
Oracle에서 UPDATE JOIN
기능을 지원하지 않기 때문에, MERGE INTO
를 이용해 테이블을 조인하여 업데이트하는 방법을 사용할 수 있습니다.
MERGE INTO employees e
USING departments d
ON (e.department_id = d.department_id)
WHEN MATCHED THEN
UPDATE SET e.salary = e.salary * 1.1
WHERE d.location_id = 1800;
- 설명:
employees
와departments
테이블을 조인하여location_id
가 1800인 부서의 직원salary
를 10% 증가시킵니다.
요약
UPDATE
문은 데이터를 수정할 때 사용합니다.WHERE
절을 사용해 조건에 맞는 레코드만 선택적으로 업데이트할 수 있습니다.CASE
문, 서브쿼리,MERGE INTO
등을 활용하면 더욱 복잡한 업데이트 작업도 가능합니다.COMMIT
과ROLLBACK
으로 변경 사항을 저장하거나 취소할 수 있습니다.
이 예제들을 통해 다양한 상황에서 Oracle의 UPDATE
문을 활용하는 방법을 익히실 수 있을 거예요! 😊