본문 바로가기
오라클

[오라클] DELETE 문법 완벽 정리 (예제 + 주의 사항)

by devlog93 2026. 1. 2.

DELETE는 테이블에 저장된 기존 데이터를 삭제하는 DML 문이다. 데이터 구조는 남기고 행(row) 단위의 데이터만 제거한다. 특히 WHERE 조건을 잘못 쓰거나 생략하면 모든 데이터가 한 번에 삭제될 수 있기 때문에 UPDATE보다도 더 신중하게 사용해야 한다.


1. DELETE 기본 개념

  • 테이블의 모든 행 삭제
  • 테이블 구조는 유지됨
  • WHERE 절이 없으면 전체 삭제 (매우 위험)
DELETE 
  FROM 테이블명;

 

예제용 테이블 EMP

EMPNO ENAME DEPTNO SAL JOB
1001 KIM 10 3000 CLERK
1002 LEE 20 4000 MANAGER
1003 PARK 10 2000 CLERK
1004 CHOI 30 3500 ANALYST

 


2. 특정 데이터 삭제 (기본 DELETE)

√ 사번이 1003인 직원 삭제 -> WHERE 절로 삭제 대상 명확히 지정

DELETE 
  FROM EMP
 WHERE EMPNO = 1003;

 

◆ 실행 결과

EMPNO ENAME DEPTNO SAL JOB
1001 KIM 10 3000 CLERK
1002 LEE 20 4000 MANAGER
1003 CHOI 30 3500 ANALYST

 


3. 조건식 DELETE

√ 특정 부서 데이터 삭제 -> 10번 부서에 속한 직원만 삭제됨

DELETE
  FROM EMP
 WHERE DEPTNO = 10;

 

√ 비교 연산자 활용 -> 급여가 3000 미만인 직원 삭제

DELETE 
  FROM EMP
 WHERE SAL < 3000;

 


4. WHERE 절 없는 DELETE (최악의 사고)

  • 모든 데이터 삭제됨
  • 실무 최악의 실수 조심하자...!
DELETE
  FROM EMP;

 


5. 서브쿼리를 이용한 DELETE

√ 특정 조건 만족하는 데이터 삭제

√  서브쿼리 결과가 여러 건이어도 가능 (IN)

DELETE 
  FROM EMP
 WHERE DEPTNO IN (
                  SELECT DEPTNO
                    FROM DEPT
                   WHERE LOC = 'SEOUL'
                  );

 

√ EXISTS 활용 (다음 글에서 정리해 보겠습니다.)

DELETE
  FROM EMP A
 WHERE EXISTS (
               SELECT 1
                 FROM DEPT B
                WHERE A.DEPTNO = B.DEPTNO
                  AND B.DEPTNO = 20
               );

 


6. DELETE 실행 순서

  1. WHERE 조건 검색
  2. 삭제 대상 행 결정
  3. 행 삭제
  4. 트랜잭션 유지 상태

7. DELETE + 트랜잭션 (COMMIT / ROLLBACK)

  • COMMIT 전까지는 복구 가능
  • COMMIT 이후 복구 매우 어려우니 주의하자...!
DELETE
  FROM EMP
 WHERE DEPTNO = 30;
 
 ROLLBACK;         -- 삭제 취소
 
 COMMIT;           -- 삭제 확정

 


8. DELETE vs TRUNCATE 차이

구분 DELETE TRUNCATE
조건 삭제 가능 불가
ROLLBACK 가능 불가
속도 느림 빠름
DML / DDL DML DDL

 


9. DELETE 핵심 요약

항목 설명
역할 행(row) 삭제
WHERE 필수
복구 COMMIT 전 가능
서브쿼리 가능
주의 사항 SELECT -> DELETE (SELECT로 데이터 확인 후 DELETE 하자...!)

 


마무리

DELETE 문은 데이터베이스에서 데이터를 제거하는 가장 직접적이고 강력한 명령어다. 그만큼 작은 실수 하나가 돌이킬 수 없는 데이터 손실로 이어질 수 있기 때문에 다른 SQL 문법보다도 훨씬 더 신중한 접근이 필요하다.

특히 실무에서는

  • WHERE 절 누락
  • 삭제 대상 확인 없이 실행
  • 외래키 제약조건 미확인
  • COMMIT 타이밍 실수

이것들과 같은 이유로 문제가 발생하는 경우가 많다. 그래서 DELETE는 삭제하는 것보다 SELECT로 검증을 한 후에 DELETE 하는 것을 추천한다. 이렇게 습관을 들이면 아주 좋을 것 같다. 다음 글에서는 트랜잭션에 대해 알아볼까 합니다. 감사합니다. (_ _)