MySQL - NOT REGEXP 연산자

NOT REGEXP 소개

안녕하세요, 데이터베이스 열정가 되고자 하는 여러분! 오늘 우리는 MySQL의 NOT REGEXP 연산자에 대해 흥미로운 세계로 뛰어들어 보겠습니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 저는 이 주제를 첫 번째로 배울 때 느낀 그 기쁨과 함께 안내해 드리겠습니다. 믿으세요, 이 수업이 끝나면 여러분은 이 강력한 도구를 데이터베이스 마법사처럼 사용할 수 있을 것입니다!

MySQL - NOT REGEXP Operator

NOT REGEXP는 무엇인가요?

먼저 NOT REGEXP이 정확히 무엇인지 이해해 보겠습니다. 간단히 말해, NOT REGEXP은 특별한 클럽의 보디가드처럼 행동하지만, 사람들을 입장시키는 대신 특정 패턴을 우리의 검색 결과에서 제외시킵니다.

REGEXP은 정규 표현식을 의미하며, 검색 패턴을 형성하는 문자열의 시퀀스입니다. NOT를 앞에 추가하면, 우리는 "MySQL, 이 패턴에 맞지 않는 모든 것을 보여줘!"라고 말하고 있는 것입니다.

MySQL NOT REGEXP 연산자의 활용

이제 손을 dirt하고 실제로 어떻게 작동하는지 보겠습니다. 가정해 봅시다. 우리가 book_club이라는 테이블이 있고, 그 안에 book_title이라는 열이 있다고 합시다. 우리는 제목에 "mystery"라는 단어가 들어 있지 않은 모든 책을 찾고 싶습니다.

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery';

이 예제에서 MySQL은 "mystery"라는 단어가 포함되지 않은 모든 책 제목을 반환합니다. 도서관 사서에게 미스터리가 아닌 모든 책을 요청하는 것과 같은 것입니다 - 정말 쉬워요, 아닙니까?

대소문자 민감성

중요한 점을 하나 알려드리겠습니다. 기본적으로 REGEXP (그리고 NOT REGEXP)은 대소문자를 구분하지 않습니다. 따라서 'mystery', 'Mystery', 그리고 'mYsTeRy' 모두 이전 예제에서 제외됩니다. 만약 대소문자를 구분하려면 BINARY 키워드를 사용할 수 있습니다:

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP BINARY 'mystery';

이제 'mystery' (전부 소문자)만 제외되고, 'Mystery'나 'MYSTERY'는 여전히 결과에 나타납니다.

고급 NOT REGEXP 패턴

이제 한 단계 더 나아가 더 복잡한 패턴을 살펴보겠습니다. NOT REGEXP은 매우 다양하게 사용할 수 있습니다!

여러 단어 제외

어떻게 하면 "mystery" 또는 "thriller"라는 단어가 제목에 들어 있는 책을 모두 제외할 수 있을까요?

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery|thriller';

| 기호는 "또는" 연산자 역할을 합니다. 이 쿼리는 "mystery" 또는 "thriller"가 제목에 포함되지 않은 모든 책을 반환합니다.

시작이나 끝에 있는 단어 제외

"제목이 'The'로 시작하지 않는 책을 찾고 싶다면 어떻게 하죠?"

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP '^The';

^ 기호는 패턴을 문자열의 시작에 고정합니다. 반대로, "Chronicles"로 끝나지 않는 책을 찾고 싶다면 다음과 같이 사용할 수 있습니다:

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'Chronicles$';

$ 기호는 패턴을 문자열의 끝에 고정합니다.

NOT REGEXP 연산자를 클라이언트 프로그램에서 사용하기

이제 NOT REGEXP을 클라이언트 프로그램에서 어떻게 사용할 수 있는지 살펴보겠습니다. 예를 들어 Python과 MySQL Connector 라이브러리를 사용하는 것을 보여드리겠습니다. 다른 언어에서도 개념은 비슷합니다.

import mysql.connector

# 연결 설정
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="book_club_db"
)

mycursor = mydb.cursor()

# NOT REGEXP 쿼리 실행
mycursor.execute("SELECT book_title FROM book_club WHERE book_title NOT REGEXP 'fantasy|sci-fi'")

# 결과 가져오기 및 출력
for x in mycursor:
print(x)

이 스크립트는 데이터베이스에 연결하고, 제목에 "fantasy" 또는 "sci-fi"가 포함되지 않은 모든 책을 찾는 쿼리를 실행한 다음, 결과를 출력합니다.

일반 NOT REGEXP 패턴

사용할 수 있는 몇 가지 일반 패턴을 살펴보겠습니다:

패턴 설명 예제
[^...] 브래켓 안에 없는 모든 문자를 일치시킵니다 '[^aeiou]'는 모든 비모음을 일치시킵니다
.* 모든 문자 시퀀스를 일치시킵니다 'not.*end'는 "not"과 "end" 사이에 어떤 문자가 와도 일치시킵니다
\d 모든 숫자를 일치시킵니다 '\d'는 모든 단일 숫자를 일치시킵니다
\D 모든 비숫자를 일치시킵니다 '\D'는 모든 단일 비숫자 문자를 일치시킵니다
\s 모든 공백 문자를 일치시킵니다 '\s'는 공백, 탭, 개행 문자를 일치시킵니다
\S 모든 비공백 문자를 일치시킵니다 '\S'는 공백, 탭, 개행 문자가 아닌 모든 문자를 일치시킵니다

결론

그렇습니다, 미래의 데이터베이스 고수 여러분! NOT REGEXP 연산자를 기본 사용법에서 고급 패턴까지 탐구해 보았습니다. 기억하시라, 강력한 도구는 연습이 필요합니다. 다양한 패턴을 실험하고 어떤 결과를 얻는지 보세요.

저의 교사生涯 동안, 학생들이 NOT REGEXP을 이해하는 데 어려움을 겪다가 복잡한 쿼리에서 자유자재로 사용할 수 있게 되는 것을 목격했습니다. 여러분도 그들의 길을 따를 수 있을 것입니다!

끝으로, 데이터베이스 유머 한 가지를 드리겠습니다: 왜 개발자가 일을 그만뒀을까요? 그는 자신의 연봉에 대해 논의할 때 "TABLE"할 수 없었기 때문입니다! (알겠죠? TABLE? 그만 나가겠습니다...)

지속적으로 연습하고, 호기심을 가지고, 행복하게 쿼리를 작성하세요!

Credits: Image by storyset