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

MySQL NOT IN()으로 특정 행만 남기고 나머지 데이터 삭제하기

MySQL에서 NOT IN() 절을 사용하면 지정한 값에 해당하지 않는 행들만 선택적으로 삭제할 수 있습니다. 이 글에서는 예제 테이블을 만들고, 특정 학생 데이터를 제외한 나머지 행을 삭제하는 전체 과정을 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 학생 정보를 저장할 테이블을 생성합니다. AUTO_INCREMENT 속성으로 자동 증가되는 기본 키를 설정하고, 시작 값을 101로 지정합니다.

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

2. 샘플 데이터 삽입

INSERT 문을 사용해 다섯 명의 학생 레코드를 추가합니다.

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

3. 전체 데이터 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable1830;

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

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       101 | Chris       |
|       102 | David       |
|       103 | Mike        |
|       104 | Sam         |
|       105 | Bob         |
+-----------+-------------+
5 rows in set (0.00 sec)

4. NOT IN()으로 특정 행 제외 후 삭제

이제 핵심 쿼리입니다. WHERE 절과 NOT IN()을 조합하면 목록에 포함된 ID(101, 103, 105)를 제외한 나머지 행, 즉 102번 David과 104번 Sam의 데이터만 삭제됩니다.

mysql> delete from DemoTable1830
    where StudentId NOT IN('101','103','105');
Query OK, 2 rows affected (0.00 sec)

5. 삭제 결과 확인

삭제가 정상적으로 처리되었는지 테이블을 다시 조회해 보겠습니다.

mysql> select * from DemoTable1830;

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

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       101 | Chris       |
|       103 | Mike        |
|       105 | Bob         |
+-----------+-------------+
3 rows in set (0.00 sec)

정리

위 예제처럼 DELETE 문에 NOT IN()을 활용하면 유지하고 싶은 행의 ID 목록만 지정해 두고, 그 외의 데이터를 한 번에 삭제할 수 있습니다. 반대로 IN()을 사용하면 목록에 포함된 행만 삭제할 수 있으니, 상황에 맞게 두 절을 활용하면 됩니다. 실무에서는 대량의 데이터를 삭제하기 전에 반드시 SELECT 문으로 먼저 대상 행을 확인한 후 삭제를 실행하는 것이 안전합니다.