MySQL에서 테이블을 조회할 때 특정 조건에 해당하는 레코드를 제외하고 결과를 얻고 싶다면 NOT LIKE 연산자를 사용하면 됩니다. 이 글에서는 예제 테이블을 직접 만들어 보고, NOT LIKE 연산자를 활용해 원하지 않는 레코드를 걸러내는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 학생 정보를 저장할 테이블을 생성합니다. 학생 ID는 자동 증가(AUTO_INCREMENT) 기본 키로 설정합니다.
mysql> create table DemoTable
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20),
-> StudentAdmissionYear varchar(20)
-> );
Query OK, 0 rows affected (1.22 sec)
2. INSERT 문으로 데이터 삽입하기
테이블 생성이 완료되면 INSERT 명령으로 여러 학생의 이름과 입학 연도를 입력합니다.
mysql> insert into DemoTable(StudentName,StudentAdmissionYear) values('Chris','2017');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentName,StudentAdmissionYear) values('David','2015');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentName,StudentAdmissionYear) values('Bob','2019');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(StudentName,StudentAdmissionYear) values('Carol','2015');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(StudentName,StudentAdmissionYear) values('Sam','2018');
Query OK, 1 row affected (0.12 sec)3. SELECT 문으로 전체 레코드 확인하기
SELECT 문을 실행해 현재 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+-------------+----------------------+
| StudentId | StudentName | StudentAdmissionYear |
+-----------+-------------+----------------------+
| 1 | Chris | 2017 |
| 2 | David | 2015 |
| 3 | Bob | 2019 |
| 4 | Carol | 2015 |
| 5 | Sam | 2018 |
+-----------+-------------+----------------------+
5 rows in set (0.00 sec)
4. NOT LIKE 연산자로 특정 레코드 제외하기
이제 입학 연도가 2015년인 레코드를 결과에서 제외하고 싶다고 가정해 보겠습니다. 이럴 때 WHERE 절과 함께 NOT LIKE 연산자를 사용하면 됩니다. 와일드카드 문자 %를 앞뒤에 붙여 해당 값이 포함된 모든 레코드를 매칭 대상에서 배제합니다.
mysql> select *from DemoTable
-> where StudentAdmissionYear not like '%2015%';
실행 결과, 입학 연도(StudentAdmissionYear)가 2015년인 David과 Carol의 레코드가 제외되고 나머지 3개 행만 반환됩니다.
+-----------+-------------+----------------------+
| StudentId | StudentName | StudentAdmissionYear |
+-----------+-------------+----------------------+
| 1 | Chris | 2017 |
| 3 | Bob | 2019 |
| 5 | Sam | 2018 |
+-----------+-------------+----------------------+
3 rows in set (0.04 sec)
정리
LIKE 연산자가 지정한 패턴과 일치하는 레코드를 찾는 반면, NOT LIKE는 그 패턴과 일치하지 않는 레코드만 반환합니다. 와일드카드 %(임의의 문자열) 및 _(임의의 한 문자)와 조합하면 다양한 조건으로 데이터를 유연하게 필터링할 수 있습니다. 특정 값을 포함하는 레코드를 결과에서 빼고 싶을 때 NOT LIKE '%값%' 형태를 기억해 두면 유용합니다.