Оператор LIKE в SQL: синтаксис, примеры, подстановочные знаки

Обложка: Оператор LIKE в SQL: синтаксис, примеры, подстановочные знаки
Ключевые выводы
- Оператор LIKE используется в WHERE для поиска по шаблону в строковых столбцах
- Символ % заменяет любое количество символов (включая ноль), а _ — ровно один символ
- LIKE работает во всех популярных СУБД: MySQL, PostgreSQL, SQL Server, Oracle, SQLite
- Для поиска символов % и _ в строке используйте экранирование через ESCAPE
- NOT LIKE инвертирует условие и возвращает строки, не соответствующие шаблону

LIKE в SQL — это оператор для фильтрации строк по шаблону. Он используется в конструкции WHERE и позволяет находить значения, которые содержат, начинаются или заканчиваются определённой последовательностью символов. В этой статье разберём синтаксис LIKE, подстановочные знаки и практические примеры.

  1. Синтаксис оператора LIKE
  2. Подстановочные знаки % и _
  3. Примеры использования LIKE
  4. Оператор NOT LIKE
  5. Экранирование спецсимволов
  6. LIKE в разных СУБД
  7. Частые вопросы

Синтаксис оператора LIKE

Оператор LIKE применяется внутри WHERE для сравнения значения столбца с шаблоном. Общий синтаксис выглядит так: Эта статья — часть нашего полного путеводителя по SQL.

			SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
		

Вместо pattern указывается строка-шаблон с подстановочными знаками. Если значение столбца соответствует шаблону, строка попадает в результат.

Подстановочные знаки % и _

В шаблонах LIKE используются два специальных символа:

  • % — заменяет любое количество символов (включая ноль). Например, 'J%' найдёт все строки, начинающиеся с J.
  • _ — заменяет ровно один символ. Например, '_a%' найдёт строки, где вторая буква — a.

Эти знаки можно комбинировать. Вот распространённые шаблоны:

			LIKE 'A%'      -- начинается с A
LIKE '%a'      -- заканчивается на a
LIKE '%or%'    -- содержит подстроку or
LIKE '_r%'     -- вторая буква r
LIKE 'a_%'     -- начинается с a, минимум 2 символа
LIKE 'a__%'    -- начинается с a, минимум 3 символа
		

Примеры использования LIKE

Рассмотрим практические примеры на таблице employees с полями name, email и city.

Найти всех сотрудников, чьё имя начинается с J:

			SELECT * FROM employees
WHERE name LIKE 'J%';
		

Символ % после J означает, что после буквы J может быть любое количество символов. Запрос вернёт строки с именами John, Jane, James и т.д.

Найти все адреса электронной почты на Gmail:

			SELECT * FROM employees
WHERE email LIKE '%@gmail.com';
		

Здесь % перед @gmail.com указывает, что перед доменом может быть любая последовательность символов.

Найти имена из 6 символов, начинающиеся с J и заканчивающиеся на n:

			SELECT * FROM employees
WHERE name LIKE 'J____n';
		

Каждый символ _ обозначает ровно один произвольный символ. Четыре подчёркивания между J и n означают, что между ними должно быть ровно четыре символа.

Найти сотрудников из городов, содержащих слово "York":

			SELECT * FROM employees
WHERE city LIKE '%York%';
		

Запрос вернёт строки с городами New York, York, Yorkshire и любыми другими, в названии которых встречается "York".

Оператор NOT LIKE

Оператор NOT LIKE инвертирует условие — он возвращает строки, которые не соответствуют шаблону:

			SELECT * FROM employees
WHERE email NOT LIKE '%@gmail.com';
		

Этот запрос вернёт всех сотрудников, чья почта не на Gmail. NOT LIKE полезен, когда нужно исключить определённые паттерны из результата.

Экранирование спецсимволов

Если нужно найти строку, которая буквально содержит символ % или _, их необходимо экранировать. Для этого используется ключевое слово ESCAPE:

			SELECT * FROM products
WHERE discount LIKE '%10\%%' 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 — в отдельном гайде.