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