728x90

Oracle Database에서는 테이블에 저장된 데이터를 삭제하기 위해 DELETE 문을 사용합니다. 이 글에서는 DELETE 문법의 기본 구조부터 실무에서 자주 쓰이는 고급 예제까지 풍부하게 설명하고, 실수를 방지하기 위한 주의사항도 함께 정리하였습니다.
1. DELETE 문이란?
DELETE 문은 지정된 조건에 따라 테이블의 데이터를 행 단위로 삭제하는 SQL 구문입니다. DELETE는 WHERE 절이 없을 경우 테이블 전체의 데이터를 삭제하므로 주의가 필요합니다.
기본 문법
DELETE FROM 테이블명
WHERE 조건;
2. 단일 행 삭제 예제
DELETE FROM employees
WHERE employee_id = 101;
사 번이 101인 직원을 삭제합니다.
3. 다중 조건 삭제 예제
DELETE FROM employees
WHERE department_id = 50 AND salary < 4000;
부서 번호가 50이면서 급여가 4000 미만인 직원들을 삭제합니다.
4. 전체 데이터 삭제 (주의 필요)
DELETE FROM employees;
employees 테이블의 모든 행을 삭제합니다. WHERE 절이 없기 때문에 매우 주의해야 합니다.
5. 서브쿼리를 이용한 삭제
DELETE FROM employees
WHERE department_id IN (
SELECT department_id FROM departments WHERE location_id = 1700
);
위치는 1700인 부서에 속한 직원들을 삭제하는 예제입니다.
6. EXISTS 조건 사용
DELETE FROM employees e
WHERE EXISTS (
SELECT 1 FROM departments d
WHERE d.department_id = e.department_id
AND d.department_name = 'Sales'
);
부서명이 'Sales'인 부서에 속한 직원들을 삭제합니다.
7. DELETE와 조인 구현 (MERGE 또는 서브쿼리 사용)
Oracle은 JOIN을 직접 지원하지 않기 때문에 서브쿼리를 활용합니다.
DELETE FROM employees
WHERE department_id IN (
SELECT department_id FROM departments WHERE manager_id IS NULL
);
관리자가 없는 부서에 속한 직원을 삭제하는 예제입니다.
8. DELETE와 RETURNING INTO (PL/SQL)
DECLARE
v_name VARCHAR2(100);
BEGIN
DELETE FROM employees
WHERE employee_id = 105
RETURNING first_name INTO v_name;
END;
삭제한 직원의 이름을 변수로 반환받는 방법입니다.
9. 대량 삭제 성능 팁
- 조건에 따라
ROWNUM또는ROWID로 대상을 제한 - 대량 삭제 시
FORALL사용하거나TRUNCATE고려 - 삭제 전 인덱스 존재 여부 및 트리거 실행 여부 확인
10. TRUNCATE vs DELETE 차이점
| 항목 | DELETE | TRUNCATE |
|---|---|---|
| 삭제 방식 | 행 단위 삭제 | 테이블 전체 초기화 |
| ROLLBACK 가능 여부 | 가능 | 불가능 |
| 트리거 실행 | 실행됨 | 실행되지 않음 |
| 성능 | 비교적 느림 | 매우 빠름 |
11. DELETE 시 자주 발생하는 오류
- ORA-02292: 자식 테이블에 참조되는 데이터 →
ON DELETE CASCADE또는 순서 확인 - ORA-00933: SQL 명령문이 올바르지 않음 → 문법 오류 확인
- ORA-00054: 리소스가 사용 중 → LOCK 해제 필요
12. 트랜잭션 처리
DELETE FROM employees
WHERE employee_id = 110;
COMMIT; -- 변경 내용 저장
-- 또는
ROLLBACK; -- 변경 내용 취소
13. DELETE 안전하게 사용하는 팁
- 삭제 전
SELECT문으로 조건에 맞는 데이터 확인 - 트랜잭션을 활용해 복구 가능성 확보
- 조건 없이 DELETE 문 사용 금지 (또는 사전 로그 백업)
참고 출처
- Oracle 공식 문서
- Oracle DELETE Tutorial
- 『오라클 SQL 레퍼런스 가이드』, 한빛미디어
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] ROLE() 실무 예제로 배우는 권한 관리의 핵심 기초 (0) | 2025.06.08 |
|---|---|
| [ORACLE] TRIGGER() 실전 예제로 배우는 데이터 자동화의 핵심 기술 (0) | 2025.06.08 |
| [ORACLE] UPDATE() 기본 문법부터 실전 예제까지 완전 정리 (0) | 2025.06.08 |
| [ORACLE] MERGE() 문법 완전 정리 : INSERT와 UPDATE를 동시에 처리하기 (0) | 2025.06.08 |
| [ORACLE] INSERT() 기초부터 실전까지 : 초보 개발자를 위한 SQL 가이드 (0) | 2025.06.08 |