Оператор LIKE в SQL: синтаксис, примеры, подстановочные знаки
, отредактировано
Ключевые выводы
- Оператор LIKE используется в WHERE для поиска по шаблону в строковых столбцах
- Символ%заменяет любое количество символов (включая ноль), а_— ровно один символ
- LIKE работает во всех популярных СУБД: MySQL, PostgreSQL, SQL Server, Oracle, SQLite
- Для поиска символов%и_в строке используйте экранирование черезESCAPE
- NOT LIKE инвертирует условие и возвращает строки, не соответствующие шаблону
LIKE в SQL — это оператор для фильтрации строк по шаблону. Он используется в конструкции WHERE и позволяет находить значения, которые содержат, начинаются или заканчиваются определённой последовательностью символов. В этой статье разберём синтаксис LIKE, подстановочные знаки и практические примеры.
- Синтаксис оператора LIKE
- Подстановочные знаки % и _
- Примеры использования LIKE
- Оператор NOT LIKE
- Экранирование спецсимволов
- LIKE в разных СУБД
- Частые вопросы
Синтаксис оператора LIKE
Оператор LIKE применяется внутри WHERE для сравнения значения столбца с шаблоном. Общий синтаксис выглядит так: Эта статья — часть нашего полного путеводителя по SQL.
Вместо pattern указывается строка-шаблон с подстановочными знаками. Если значение столбца соответствует шаблону, строка попадает в результат.
Подстановочные знаки % и _
В шаблонах LIKE используются два специальных символа:
%— заменяет любое количество символов (включая ноль). Например,'J%'найдёт все строки, начинающиеся с J._— заменяет ровно один символ. Например,'_a%'найдёт строки, где вторая буква — a.
Эти знаки можно комбинировать. Вот распространённые шаблоны:
Примеры использования LIKE
Рассмотрим практические примеры на таблице employees с полями name, email и city.
Найти всех сотрудников, чьё имя начинается с J:
Символ % после J означает, что после буквы J может быть любое количество символов. Запрос вернёт строки с именами John, Jane, James и т.д.
Найти все адреса электронной почты на Gmail:
Здесь % перед @gmail.com указывает, что перед доменом может быть любая последовательность символов.
Найти имена из 6 символов, начинающиеся с J и заканчивающиеся на n:
Каждый символ _ обозначает ровно один произвольный символ. Четыре подчёркивания между J и n означают, что между ними должно быть ровно четыре символа.
Найти сотрудников из городов, содержащих слово "York":
Запрос вернёт строки с городами New York, York, Yorkshire и любыми другими, в названии которых встречается "York".
Оператор NOT LIKE
Оператор NOT LIKE инвертирует условие — он возвращает строки, которые не соответствуют шаблону:
Этот запрос вернёт всех сотрудников, чья почта не на Gmail. NOT LIKE полезен, когда нужно исключить определённые паттерны из результата.
Экранирование спецсимволов
Если нужно найти строку, которая буквально содержит символ % или _, их необходимо экранировать. Для этого используется ключевое слово ESCAPE:
В этом примере \% означает буквальный символ процента, а не подстановочный знак. Запрос найдёт строки, содержащие текст "10%".
LIKE в разных СУБД
Оператор LIKE работает во всех основных системах управления базами данных, но есть нюансы:
- MySQL — по умолчанию LIKE регистронезависим для столбцов с кодировкой utf8. Для регистрозависимого поиска используйте
LIKE BINARY. - PostgreSQL — LIKE регистрозависим. Для регистронезависимого поиска используйте
ILIKE. - SQL Server — регистрозависимость зависит от collation базы данных. Поддерживает дополнительные подстановочные знаки:
[ ]для диапазонов символов. - SQLite — LIKE регистронезависим для ASCII-символов. Для Unicode нужна дополнительная настройка.
- Oracle — LIKE всегда регистрозависим. Для регистронезависимого поиска используйте
UPPER()илиLOWER().
Оператор LIKE — один из базовых инструментов фильтрации в SQL. Для более сложных шаблонов стоит обратить внимание на регулярные выражения: REGEXP в MySQL или ~ в PostgreSQL. Также читайте наши другие материалы по SQL:
Частые вопросы
Чем отличается LIKE от знака равенства (=) в SQL?
Оператор = ищет точное совпадение, а LIKE позволяет использовать подстановочные знаки % и _ для поиска по шаблону. Например, WHERE name = 'John' найдёт только "John", а WHERE name LIKE 'J%' — все имена на J.
Можно ли использовать LIKE с числовыми столбцами?
Формально да, но СУБД приведёт числовое значение к строке, что снижает производительность. Для числовых условий лучше использовать операторы сравнения (=, >, <, BETWEEN).
Как сделать регистронезависимый поиск через LIKE?
Зависит от СУБД. В PostgreSQL используйте ILIKE. В MySQL LIKE по умолчанию регистронезависим. В Oracle оберните столбец и шаблон в UPPER() или LOWER(). В SQL Server поведение определяется collation базы данных.
Влияет ли LIKE на производительность запросов?
Да. Шаблоны, начинающиеся с % (например, '%word'), не используют индекс и вызывают полное сканирование таблицы. Шаблоны вида 'word%' могут использовать индекс и работают значительно быстрее.
Чем заменить LIKE для сложных шаблонов?
Для регулярных выражений используйте REGEXP (MySQL), ~ (PostgreSQL) или PATINDEX (SQL Server). Для полнотекстового поиска — MATCH ... AGAINST (MySQL) или to_tsvector / to_tsquery (PostgreSQL). Все основные команды SQL — в отдельном гайде.