📊 [SQL] 제40장 DELETE(2) - 여러 개의 데이터를 한 번에 삭제할 수 있을까요?
제40장. DELETE (2)
"여러 개의 데이터를 한 번에 삭제할 수 있을까요?"
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- 여러 행(Row)을 한 번에 삭제할 수 있다.
- 다양한 조건과 함께 DELETE를 사용할 수 있다.
- DELETE 후 영향을 받은 행(Row)의 개수를 확인할 수 있다.
- 안전하게 DELETE를 실행하는 방법을 설명할 수 있다.
지난 시간을 떠올려 봅시다.
지난 시간에는
한 개의 데이터를 삭제하는 방법을 배웠습니다.
DELETE FROM Customers
WHERE CustomerID = 100;
이번에는 조금 다른 상황을 생각해 보겠습니다.
"시험용으로 입력한 고객이 30명 있습니다."
한 명씩 삭제해야 할까요?
그럴 필요는 없습니다.
조건만 잘 작성하면
여러 행을 한 번에 삭제할 수 있습니다.
DELETE는 여러 행도 삭제할 수 있습니다.
WHERE 조건에
여러 행이 포함되면
그 모든 행이 삭제됩니다.
예제 1
독일 고객을 모두 삭제해 보겠습니다.
DELETE FROM Customers
WHERE Country = 'Germany';
실행 전
| CustomerID | CustomerName | Country |
| 1 | Alfreds Futterkiste | Germany |
| 6 | Blauer See Delikatessen | Germany |
| 17 | Drachenblut Delikatessend | Germany |
| 21 | Paris spécialités | France |
실행 후
| CustomerID | CustomerName | Country |
| 21 | Paris spécialités | France |
Germany였던 고객들이
모두 삭제되었습니다.
SQL를 한 줄씩 살펴보기
DELETE FROM Customers
Customers 테이블에서
데이터를 삭제합니다.
WHERE Country = 'Germany';
Country가 Germany인
모든 행을 찾습니다.
찾은 모든 행이 삭제됩니다.
예제 2
가격이 10 이하인 상품을 삭제합니다.
DELETE FROM Products
WHERE Price <= 10;
조건에 맞는 모든 상품이
한 번에 삭제됩니다.
그림으로 이해하기
Customers
↓
WHERE 조건 검사
↓
조건에 맞는 행 선택
↓
행 삭제
UPDATE와 마찬가지로
DELETE도
조건을 만족하는 모든 행을 처리합니다.
실제 업무에서는?
다음과 같은 작업에 자주 사용됩니다.
- 오래된 로그 삭제
- 임시 데이터 정리
- 시험용 데이터 제거
- 중복 데이터 삭제
- 탈퇴 회원 정보 정리
매일 자동으로 실행되는 DELETE도
많이 있습니다.
많이 하는 실수
실수 ①
조건이 너무 넓다.
DELETE FROM Products
WHERE Price > 0;
생각보다 훨씬 많은 상품이
삭제될 수 있습니다.
실수 ②
조건을 잘못 작성한다.
WHERE Country='German'
삭제되는 데이터가
하나도 없을 수도 있습니다.
실수 ③
삭제된 행의 개수를 확인하지 않는다.
MySQL은
삭제된 행(Row)의 개수를 알려줍니다.
예상보다 많거나 적다면
조건을 다시 확인해야 합니다.
실무 습관
DELETE를 실행하기 전에 COUNT(*)를 실행해 보세요.
예를 들어
SELECT COUNT(*)
FROM Customers
WHERE Country='Germany';
먼저
삭제될 데이터의 개수를 확인합니다.
그 다음
DELETE FROM Customers
WHERE Country='Germany';
를 실행하면
실수를 크게 줄일 수 있습니다.
DELETE는 실행 취소(Ctrl+Z)가 없습니다.
워드프로세서에서는
실수하면
Ctrl+Z를 누르면 됩니다.
하지만
데이터베이스에서는
DELETE를 실행한 후
복구가 매우 어려운 경우가 많습니다.
그래서
DELETE는 항상
신중하게 실행해야 합니다.
한눈에 정리
| WHERE 결과 | DELETE 동작 |
| 1개의 행 | 1개의 행 삭제 |
| 여러 행 | 여러 행 삭제 |
| 조건 없음 | 모든 행 삭제 |
이번 장 핵심 정리
✅ DELETE는 여러 행도 한 번에 삭제할 수 있다.
✅ WHERE 조건에 맞는 모든 행이 삭제된다.
✅ DELETE 전에 COUNT(*)로 삭제될 개수를 확인하면 안전하다.
✅ DELETE 후 영향을 받은 행(Row)의 개수도 확인하는 습관을 갖는다.
연습 문제
기본 문제
① Country가 Mexico인 고객을 모두 삭제하는 SQL을 작성하시오.
② Price가 20 이상인 상품을 모두 삭제하는 SQL을 작성하시오.
응용 문제
① Country가 Brazil 또는 Argentina인 고객을 삭제하는 SQL을 작성하시오.
② Price가 5 이하인 상품을 삭제하는 SQL을 작성하시오.
도전 문제
다음 SQL을 실행하면 어떤 일이 발생하는지 설명하시오.
DELETE FROM Customers
WHERE Country <> 'Korea';
정답
기본 문제
DELETE FROM Customers
WHERE Country = 'Mexico';
DELETE FROM Products
WHERE Price >= 20;
💡 실무 이야기
실무에서는 DELETE를 실행할 때 "몇 개가 삭제될 것인가?"를 먼저 예측하는 것이 매우 중요합니다.
예를 들어 관리자가 "오래된 로그 약 500건을 삭제한다."고 예상했는데, 실제로는 50만 건이 삭제된다면 큰 사고가 발생할 수 있습니다.
그래서 많은 개발자는 DELETE 전에 SELECT COUNT(*)를 실행하여 삭제 대상의 개수를 확인하고, DELETE를 실행한 후에도 영향받은 행(Row) 수가 예상과 일치하는지 다시 확인합니다.
이 두 단계만 습관이 되어도 대부분의 대형 사고를 예방할 수 있습니다.
✨ 다음 장 예고
다음 장은 DELETE 파트의 마지막 장입니다.
그동안 우리는
- 한 행 삭제
- 여러 행 삭제
를 배웠습니다.
마지막으로는
DELETE와 TRUNCATE의 차이, DELETE와 DROP의 차이, 그리고 데이터를 삭제할 때 꼭 알아야 할 개념을 정리하면서 DELETE 파트를 마무리하겠습니다.