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 실행 순서
- WHERE 조건 검색
- 삭제 대상 행 결정
- 행 삭제
- 트랜잭션 유지 상태
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 하는 것을 추천한다. 이렇게 습관을 들이면 아주 좋을 것 같다. 다음 글에서는 트랜잭션에 대해 알아볼까 합니다. 감사합니다. (_ _)
'오라클' 카테고리의 다른 글
| [오라클] 트랜잭션(Transaction) COMMIT / ROLLBACK 완벽 정리 (0) | 2026.01.05 |
|---|---|
| [오라클] INSERT 문법 완벽 정리 (예제+주의 사항) (0) | 2026.01.03 |
| [오라클] UPDATE 문법 완벽 정리 (예제 + 주의 사항) (0) | 2026.01.01 |
| [오라클] ORDER BY 정렬 문법 완벽 정리 (1) | 2025.12.31 |
| [오라클] WHERE 조건절 완벽 정리 (0) | 2025.12.30 |