Оператор LIKE
Оператор LIKE используется при условных запросах, когда мы хотим узнать, соответствует ли строка определённому шаблону.
Например, у нас есть таблица Users, в которой есть поле email:
MySQL 8.1SELECT name, email FROM Users;
Допустим, мы хотим найти всех пользователей, чья почта лежит в домене второго уровня «hotmail». Т.е. нужно отобрать только те записи, что отвечают условию:
- после символа «@» следует «hotmail»
- после «hotmail» следует символ «.» и далее любая последовательность символов
Для таких нетривиальных поисков по строковым полям и нужен оператор LIKE.
Синтаксис
MySQL 8.1... WHERE поле_таблицы [NOT] LIKE шаблон_строки
Шаблон может включать следующие специальные символы:
Так наш запрос на поиск пользователей в домене «hotmail» может выглядеть следующим образом:
MySQL 8.1SELECT name, email FROM Users WHERE email LIKE '%@hotmail.%'
Примеры
-
MySQL 8.1
... WHERE поле_таблицы LIKE 'text%'Сопоставляется любым строкам, начинающимся на «text»
-
MySQL 8.1
... WHERE поле_таблицы LIKE '%text'Сопоставляется любым строкам, заканчивающимся на «text»
-
MySQL 8.1
... WHERE поле_таблицы LIKE '_ext'Сопоставляется строкам, имеющим длину 4 символа, при этом 3 последних обязательно должны быть «ext». Например, слова «text» и «next»
-
MySQL 8.1
... WHERE поле_таблицы LIKE 'begin%end'Сопоставляется строкам, начинающихся на «begin» и заканчивающихся на «end»
В MySQL по умолчанию шаблоны не чувствительны к регистру
В PostgreSQL шаблоны чувствительны к регистру. Для поиска без учета регистра используйте оператор ILIKE
Экранирование специальных символов
Иногда нужно найти строки, в которых символы % и _ являются частью самого текста, а не элементами шаблона. В таких случаях эти символы нужно экранировать.
В шаблонах LIKE для экранирования по умолчанию используется символ \. Например, если нужно получить идентификаторы задач, прогресс которых равен 3%, можно написать так:
MySQL 8.1SELECT job_id FROM Jobs WHERE progress LIKE '3\%';
ESCAPE-символ
Если вместо символа по умолчанию нужно использовать другой символ экранирования, его можно указать явно с помощью ESCAPE.
Синтаксис с ESCAPE
MySQL 8.1... WHERE поле_таблицы LIKE 'шаблон_строки' ESCAPE 'символ_экранирования'
Тот же запрос можно записать с явным указанием символа экранирования:
MySQL 8.1SELECT job_id FROM Jobs WHERE progress LIKE '3!%' ESCAPE '!';
Здесь символ ! выполняет ту же роль, что и \ в предыдущем примере.
Интерактивное упражнение
Теперь давайте закрепим полученные знания на практике!
В упражнении ниже вам нужно распределить email адреса по колонкам в соответствии с заданными LIKE шаблонами.
Интерактивное упражнение недоступно
Для использования интерактивного упражнения необходим экран шириной не менее 600 пикселей. Попробуйте открыть эту страницу на компьютере или планшете.