Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 IN() 연산자로 단일 쿼리만 사용해 테이블 레코드 삭제하는 방법

개요

MySQL에서 여러 레코드를 한 번에 삭제해야 할 때 IN() 연산자를 사용하면 단일 DELETE 쿼리로 간편하게 처리할 수 있습니다. IN()은 괄호 안에 지정된 값 목록 중 하나라도 일치하는 모든 행을 대상으로 작동하기 때문에, OR 조건을 여러 번 나열하는 방식보다 코드가 훨씬 간결하고 가독성도 뛰어납니다.

테이블 생성하기

먼저 예제에 사용할 테이블을 생성하겠습니다.

mysql> create table DemoTable1922
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)

StudentId는 자동 증가(AUTO_INCREMENT) 기본 키로 설정되어 있어, 학생 이름만 삽입하면 ID가 순차적으로 자동 부여됩니다.

레코드 삽입하기

insert 명령어를 사용해 테이블에 샘플 데이터를 입력합니다.

mysql> insert into DemoTable1922(StudentName) values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1922(StudentName) values('Robert');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1922(StudentName) values('David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1922(StudentName) values('Mike');
Query OK, 1 row affected (0.00 sec)

저장된 레코드 확인하기

select 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select * from DemoTable1922;

실행 결과는 다음과 같습니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | Chris |
| 2 | Robert |
| 3 | David |
| 4 | Mike |
+-----------+-------------+
4 rows in set (0.00 sec)

총 4개의 레코드가 정상적으로 저장된 것을 확인할 수 있습니다.

IN()으로 레코드 삭제하기

이제 IN() 연산자를 사용해 StudentId가 1, 2, 3, 4인 레코드를 한 번의 DELETE 쿼리로 삭제합니다.

mysql> delete from DemoTable1922 where StudentId IN(1,2,3,4);
Query OK, 4 rows affected (0.00 sec)

WHERE 절에 IN(1,2,3,4)을 지정했기 때문에 네 개의 레코드가 동시에 삭제되었으며, 실행 결과 메시지에서도 '4 rows affected'로 확인됩니다.

삭제 결과 확인하기

다시 한번 테이블을 조회하여 레코드가 제대로 삭제되었는지 검증합니다.

mysql> select * from DemoTable1922;

모든 레코드가 삭제되어 빈 결과 집합이 반환됩니다.

Empty set (0.00 sec)

정리

이처럼 IN() 연산자를 활용하면 WHERE 절에 조건을 일일이 반복해서 나열하지 않고도 여러 개의 레코드를 하나의 DELETE 문으로 손쉽게 삭제할 수 있습니다. 특히 대량의 데이터를 특정 조건에 맞춰 일괄 삭제할 때 매우 유용하며, 서브쿼리와 결합하면 더욱 유연하고 강력한 삭제 로직도 구현할 수 있습니다.