MySQL - NOT REGEXP Оператор
Введение в NOT REGEXP
Здравствуйте,野心ерующие энтузиасты баз данных! Сегодня мы окунемся в fascinierende мир оператора NOT REGEXP в MySQL. Как ваш доброжелательный соседский учитель компьютера, я здесь, чтобы провести вас через эту тему с таким же волнением, которое я чувствовал, когда впервые узнал об этом. Поверьте мне, к концу этого урока вы будете орудовать этим мощным инструментом, как database wizard!
Что такое NOT REGEXP?
Прежде чем мы углубимся в details, давайте поймем, что на самом деле означает NOT REGEXP. На простом языке, NOT REGEXP похож наouncer в эксклюзивном клубе, но вместо того чтобы пускать людей, он удерживает определенные шаблоны из наших результатов поиска.
REGEXP означает Regular Expression, что является sequence из символов, образующих search pattern. Когда мы добавляем NOT перед ним, мы Essentially говорим: "Эй, MySQL, Покажи мне все, что не соответствует этому шаблону!"
NOT REGEXP Оператор в действии
Давайте закатаем рукава и посмотрим, как это работает на практике. Представьте, что у нас есть таблица под названием book_club
с column book_title
. Мы хотим найти все книги, в которых нет слова "mystery" в заголовках.
SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery';
В этом примере MySQL вернет все заголовки книг, которые не содержат слово "mystery". Это как если бы вы попросили библиотекаря дать вам все книги, которые не являются детективами - довольно здорово, правда?
register sensitivity
One важное замечание, что по умолчанию REGEXP (и NOT REGEXP) не чувствительны к регистру. Таким образом, 'mystery', 'Mystery' и даже 'mYsTeRy' будут исключены в нашем предыдущем примере. Если вы хотите сделать его register-sensitive, вы можете использовать keyword 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';
Символ ^
fixates шаблон в начале строки. Аналогично, если мы хотим книги, которые не заканчиваются на "Chronicles", мы можем использовать:
SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'Chronicles$';
Символ $
fixates шаблон в конце строки.
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" в заголовках, и затем выводит результаты.
Common NOT REGEXP шаблоны
Давайте рассмотрим некоторые часто встречающиеся шаблоны, которые могут быть полезны:
Шаблон | Описание | Пример |
---|---|---|
[^...] |
Подходит для любого символа, которого нет в скобках |
'[^aeiou]' Подходит для любого не гласного |
.* |
Подходит для любой последовательности символов |
'not.*end' Подходит для строк с "not" и "end" и чем-то между ними |
\d |
Подходит для любого digit |
'\d' Подходит для любого single digit |
\D |
Подходит для любого non-digit |
'\D' Подходит для любого single non-digit символа |
\s |
Подходит для любого пробельного символа |
'\s' Подходит для пробелов, tab, newlines |
\S |
Подходит для любого non-whitespace символа |
'\S' Подходит для любого символа, который не является пробелом, tab или newline |
Заключение
И вот мы на месте, будущие гуру баз данных! Мы рассмотрели оператор NOT REGEXP, от его базового использования до более сложных шаблонов. Помните, как и любое мощное средство, ему нужно время, чтобы овладеть им. Не бойтесь экспериментировать с различными шаблонами и смотреть, какие результаты вы получите.
За годы моей работы я видел, как студенты переходят от того, что они не понимают NOT REGEXP, к использованию его без усилий в сложных запросах. Вы на верном пути к тому, чтобы присоединиться к их ranks!
Прежде чем я уйду, вот немного юмора по поводу баз данных: Почему разработчик ушел с работы? Он не мог TABLE discourse о своей зарплате! (Понимаешь? TABLE? Хорошо, я уйду сам...)
Продолжайте практиковаться, оставайтесь любопытными и удачи в запросах!
Credits: Image by storyset