MySQL에서는 IN 문을 활용하면 ID를 기준으로 테이블의 여러 행을 한 번의 쿼리로 손쉽게 삭제할 수 있습니다. 개별적으로 DELETE 문을 반복 실행할 필요 없이, 삭제하고자 하는 값들을 나열하기만 하면 됩니다.
기본 문법
IN 절을 사용한 다중 행 삭제의 기본 문법은 다음과 같습니다.
DELETE FROM yourTableName WHERE yourColumnName IN(value1, value2, ..... valueN);
예제 테이블 생성
문법을 실제로 이해하기 위해 먼저 예제용 테이블을 만들어 보겠습니다. 아래는 테이블 생성 쿼리입니다.
mysql> create table DeleteManyRows -> ( -> Id int, -> Name varchar(200), -> Age int -> ); Query OK, 0 rows affected (3.35 sec)
데이터 삽입
INSERT 명령어를 사용해 테이블에 샘플 데이터를 입력합니다. 쿼리는 다음과 같습니다.
mysql> insert into DeleteManyRows values(1,'John',23); Query OK, 1 row affected (0.66 sec) mysql> insert into DeleteManyRows values(2,'Johnson',22); Query OK, 1 row affected (0.48 sec) mysql> insert into DeleteManyRows values(3,'Sam',20); Query OK, 1 row affected (0.39 sec) mysql> insert into DeleteManyRows values(4,'David',26); Query OK, 1 row affected (0.35 sec) mysql> insert into DeleteManyRows values(5,'Carol',21); Query OK, 1 row affected (0.10 sec) mysql> insert into DeleteManyRows values(6,'Smith',29); Query OK, 1 row affected (0.14 sec)
전체 데이터 조회
SELECT 문으로 테이블에 저장된 모든 레코드를 확인해 보겠습니다.
mysql> select *from DeleteManyRows;
실행 결과는 다음과 같습니다.
+------+---------+------+ | Id | Name | Age | +------+---------+------+ | 1 | John | 23 | | 2 | Johnson | 22 | | 3 | Sam | 20 | | 4 | David | 26 | | 5 | Carol | 21 | | 6 | Smith | 29 | +------+---------+------+ 6 rows in set (0.00 sec)
IN 절로 여러 행 삭제하기
이제 IN 문을 사용해 ID가 1, 2, 3, 4인 행을 한 번에 삭제하는 쿼리를 실행해 보겠습니다.
mysql> delete from DeleteManyRows where Id in(1,2,3,4); Query OK, 4 rows affected (0.25 sec)
쿼리 결과 메시지에서 알 수 있듯이 총 4개의 행이 성공적으로 삭제되었습니다.
삭제 결과 확인
여러 행이 정상적으로 삭제되었는지 다시 SELECT 문으로 확인해 보겠습니다.
mysql> select *from DeleteManyRows;
실행 결과는 다음과 같습니다.
+------+-------+------+ | Id | Name | Age | +------+-------+------+ | 5 | Carol | 21 | | 6 | Smith | 29 | +------+-------+------+ 2 rows in set (0.00 sec)
ID가 1부터 4까지인 행은 모두 제거되고, ID가 5와 6인 두 개의 행만 남아 있는 것을 확인할 수 있습니다. 이처럼 IN 절을 사용하면 조건에 맞는 여러 행을 단일 쿼리로 간편하게 삭제할 수 있습니다.