MySQL에서 값이 존재하지 않는 행 조회하기
테이블에서 특정 값들이 포함되지 않은 레코드만 조회하고 싶다면 NOT IN() 연산자를 사용하면 됩니다. NOT IN()은 지정한 값 목록에 속하지 않는 데이터만 필터링해 반환하는 조건문으로, 제외하고 싶은 값을 명확하게 지정할 수 있어 매우 유용합니다.
아래에서 실제 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 학생 정보를 저장할 테이블을 생성합니다.
mysql> create table DemoTable1991
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName varchar(20)
);
Query OK, 0 rows affected (0.61 sec)StudentId는 자동 증가(AUTO_INCREMENT) 기본키로 설정했고, StudentName에는 학생 이름을 저장합니다.
2. 샘플 데이터 삽입하기
INSERT 문을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable1991(StudentName) values('Chris');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable1991(StudentName) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1991(StudentName) values('David');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1991(StudentName) values('Sam');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1991(StudentName) values('Mike');
Query OK, 1 row affected (0.11 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 데이터를 조회해 보겠습니다.
mysql> select * from DemoTable1991;
실행 결과는 다음과 같습니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 2 | Bob | | 3 | David | | 4 | Sam | | 5 | Mike | +-----------+-------------+ 5 rows in set (0.03 sec)
총 5명의 학생 데이터가 등록된 것을 확인할 수 있습니다.
4. NOT IN()으로 특정 값 제외하기
이제 'Bob', 'Sam', 'Mike'가 아닌 학생만 조회하는 쿼리를 작성해 보겠습니다.
mysql> select * from DemoTable1991
where StudentName NOT IN('Bob','Sam','Mike');실행 결과는 다음과 같습니다.
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 3 | David | +-----------+-------------+ 2 rows in set (0.04 sec)
결과 정리
NOT IN() 조건 덕분에 'Bob', 'Sam', 'Mike' 세 명은 제외되고, 나머지 두 명인 Chris와 David만 조회되었습니다.
참고로 NOT IN() 대신 NOT EXISTS 서브쿼리나 LEFT JOIN ... IS NULL 방식도 사용할 수 있습니다. 다만 주의할 점은 NOT IN() 목록 안에 NULL 값이 포함되면 의도치 않게 빈 결과가 반환될 수 있으므로, NULL 처리가 필요한 경우에는 NOT EXISTS 방식을 사용하는 것이 더 안전합니다.