MySQL - Оператор RLIKE

Здравствуйте, начинающие энтузиасты баз данных! Сегодня мы отправимся в увлекательное путешествие в мир оператора RLIKE в MySQL. Как ваш доброжелательный сосед по компьютерным наукам, я здесь, чтобы провести вас через эту тему с множеством примеров и объяснений. Так что достаньте свои виртуальные блокноты и погружайтесь с нами!

MySQL - RLIKE Operator

Оператор RLIKE в MySQL

Что такое RLIKE?

RLIKE - это мощный оператор в MySQL, который позволяет нам выполнять соответствие шаблону с использованием регулярных выражений. Теперь я знаю, о чём вы думаете - "Регулярные выражения? Это звучит пугающе!" Но не волнуйтесь, мы разберём это шаг за шагом.

Представьте RLIKE как super-умный инструмент поиска. Это как если бы у вас был детектив в базе данных, который может найти информацию на основе сложных шаблонов. Круто, правда?

Основной синтаксис

Основной синтаксис оператора RLIKE следующий:

expr RLIKE pattern

Здесь expr - это выражение (обычно имя столбца), в котором мы хотим искать, а pattern - это регулярное выражение, с которым мы хотим соответствовать.

Давайте начнём с простого примера:

SELECT * FROM customers WHERE last_name RLIKE 'son$';

Этот запрос найдёт всех клиентов, чья фамилия заканчивается на 'son'. Символ $ в шаблоне означает "конец строки". Таким образом, он будет соответствовать именам, таким как Johnson, Wilson или Anderson.

Шаблоны, используемые с RLIKE

Теперь давайте рассмотрим некоторыеcommon шаблоны, которые мы можем использовать с RLIKE. Мне нравится думать о них как о секретных кодах, которые наш детектив использует для решения загадок!

Шаблон Описание Пример
^ Соответствует началу строки '^A' соответствует 'Apple', но не 'Banana'
$ Соответствует концу строки 'e$' соответствует 'Apple', но не 'Banana'
. Соответствует любому одному символу 'b.t' соответствует 'bat', 'bit', 'but' и т.д.
* Соответствует ноль или более вхождений предыдущего символа 'go*gle' соответствует 'ggle', 'google', 'gooogle' и т.д.
+ Соответствует одному или более вхождений предыдущего символа 'go+gle' соответствует 'google', 'gooogle', но не 'ggle'
[] Соответствует любому одному символу в скобках '[aeiou]' соответствует любому гласному
[^] Соответствует любому одному символу за пределами скобок '[^0-9]' соответствует любому симвolu, кроме цифр

Давайте применим некоторые из них!

SELECT * FROM products WHERE name RLIKE '^A.*e$';

Этот запрос найдёт все продукты, имена которых начинаются с 'A' и заканчиваются на 'e'. .* в середине означает "ноль или более любого символа". Таким образом, это будет соответствовать именам, таким как "Apple", "Airplane" или даже просто "Ae".

RLIKE для строк

RLIKE не только для поиска в таблицах. Мы можем использовать его напрямую на строках! Это也很好 для тестирования наших шаблонов перед использованием их в запросе.

SELECT 'MySQL' RLIKE 'SQL$';

Это вернёт 1 (истина), так как 'MySQL' действительно заканчивается на 'SQL'.

Вот забавный пример:

SELECT 'Mississippi' RLIKE 's+is+';

Это возвращает 1, так как 'Mississippi' содержит один или более 's', за которыми следует 'i', за которыми следует один или более 's'. Он соответствует 'ssis' в середине слова.

Оператор RLIKE с использованием клиентской программы

Теперь давайте посмотрим, как мы можем использовать RLIKE в более сложной ситуации. Представьте, что у нас есть таблица с адресами электронной почты, и мы хотим найти все адреса Gmail. Вот как мы можем это сделать:

SELECT * FROM users WHERE email RLIKE '^[A-Za-z0-9._%+-]+@gmail\\.com$';

Вау, это выглядит сложно! Давайте разберём это:

  • ^ : Начало строки
  • [A-Za-z0-9._%+-]+ : Один или более символов, разрешённых в адресах электронной почты
  • @ : Символ @
  • gmail\\.com : Literally "gmail.com" (мы должны экранировать точку с помощью обратной косой линии)
  • $ : Конец строки

Этот шаблон будет соответствовать любому стандартному адресу Gmail.

Вот история из моего преподавательского опыта: Я когда-то имел студента, который пытался найти всех пользователей с адресами электронной почты AOL в базе данных. Он вручную проверял每一条记录 (их было тысячи!). Когда я показал ему, как это сделать с помощью RLIKE, он был так взволнован, что практически танцевал вокруг класса!

Время практики!

Давайте закончим забавным упражнением. Можете ли вы написать шаблон RLIKE для поиска всех номеров телефонов в формате (XXX) XXX-XXXX? Попробуйте, а затем проверьте ответ ниже!

SELECT * FROM contacts WHERE phone RLIKE '^\\\([0-9]{3}\\\) [0-9]{3}-[0-9]{4}$';

Этот шаблон соответствует:

  • ^\\\( : Начинается с открывающей скобки (экранируется дважды, так как она особенная и в регулярных выражениях, и в MySQL)
  • [0-9]{3} : Точно три цифры
  • \\\) : Закрывающая скобка
  • ` ` : Пробел
  • [0-9]{3} : Три цифры
  • - : Тире
  • [0-9]{4} : Четыре последние цифры
  • $ : Конец строки

И вот и всё! Вы теперь equipped с силой RLIKE. Помните, как любую superpower, используйте её wisely. Счастливого запроса, будущие волшебники баз данных!

Credits: Image by storyset