본문 바로가기
Database/Oracle

[ORACLE] DELETE() 문법 완전 정리 : 실무에서 자주 쓰는 예제로 배우기

by Papa Martino V 2025. 6. 8.
728x90

오라클 DELETE() 문법 완전 정리: 실무에서 자주 쓰는 예제로 배우기
[Oracle] DELETE

 

 

 

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 문 사용 금지 (또는 사전 로그 백업)

참고 출처

728x90