> SmartGate 41 752 9863

LIKE

Поиск текста по заданному шаблону

Теория

Не всегда нужно искать точное значение целиком. Часто мы хотим найти строки, значения в которых частично совпадают с заданным шаблоном. Например:
• нужно найти товары, название которых начинается со слова 'Ноутбук';
• хотим найти всех пользователей с почтой на 'gmail.com';
• ищем должности, в которых встречается слово 'менеджер'.

Обычное сравнение через = здесь не поможет, потому что оно ищет только точное совпадение. Для таких случаев в SQL есть оператор LIKE.

LIKE сравнивает значение со строковым шаблоном. Внутри шаблона можно использовать специальные символы:
% — любое количество любых символов;
_ — ровно один любой символ.

LIKE удобно запомнить как поиск по шаблону: вы задаёте форму текста (шаблон), а SQL ищет строки, которые под неё подходят.

Важно: в PostgreSQL LIKE чувствителен к регистру. То есть 'м%' и 'М%' — это разные шаблоны. Если регистр не важен, используют ILIKE.

Синтаксис

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE 'pattern';
SQL
Шаблон после LIKE всегда пишется в кавычках.

Самые частые варианты:
LIKE 'Ноутбук%' — текст начинается с 'Ноутбук';
LIKE '%gmail.com' — текст заканчивается на 'gmail.com';
LIKE '%менеджер%' — внутри текста встречается слово 'менеджер';
LIKE '__ван' — перед 'ван' должно быть ровно два любых символа.

Также можно использовать отрицание:
NOT LIKE — оставить строки, которые не подходят под шаблон.

Если регистр не важен, используют:
ILIKE — поиск по тому же шаблону, но без учёта регистра.

Примеры

1. Находим товары, название которых начинается со слова «Ноутбук»

Шаблон 'Ноутбук%' означает: сначала должно идти слово 'Ноутбук', а дальше может быть любой хвост. Поэтому в результат попадут все товары, чьё название начинается именно так.

🔄 Попробуйте изменить запрос:

  • • Поменяйте шаблон на 'Смартфон%' и сравните результат
  • • Попробуйте шаблон '%Pro%' и посмотрите, какие товары содержат этот фрагмент внутри названия

2. Ищем пользователей с почтой gmail.com

Здесь знак % стоит в начале шаблона. Это значит, что перед 'gmail.com' может быть любой текст. Такой запрос удобно использовать, когда вас интересует именно окончание строки.

🔄 Попробуйте изменить запрос:

  • • Замените 'gmail.com' на 'mail.ru'
  • • Попробуйте отрицание: замените LIKE на NOT LIKE и посмотрите, что останется в выборке

3. Находим должности, в которых встречается слово «менеджер»

Здесь используется ILIKE, потому что нам важен сам фрагмент слова, а не точный регистр. Шаблон с процентами по краям ищет подстроку в любой части значения.

🔄 Попробуйте изменить запрос:

  • • Замените ILIKE на LIKE и сравните результат
  • • Попробуйте другой фрагмент, например '%специалист%', и сравните ILIKE с LIKE

4. Исключаем товары, которые начинаются со слова «Ноутбук»

Иногда нужно не найти совпадения, а наоборот убрать их. Для этого используют NOT LIKE. Здесь в результат попадут все товары, кроме тех, чьё название начинается со слова 'Ноутбук'.

🔄 Попробуйте изменить запрос:

  • • Поменяйте шаблон на 'Смартфон%'
  • • Замените NOT LIKE на LIKE и сравните две противоположные выборки

Типичные ошибки

Путают % и _
% означает любое количество символов, а _ — ровно один символ. Это не взаимозаменяемые вещи.

Забывают кавычки вокруг шаблона
Запись вида LIKE Ноутбук% не подойдёт. Шаблон должен быть строкой: LIKE 'Ноутбук%'.

Неправильно ставят %
'abc%' — начинается с abc.
'%abc' — заканчивается на abc.
'%abc%' — содержит abc внутри.

Забывают, что LIKE чувствителен к регистру
Если важен поиск без учёта регистра, чаще нужен ILIKE, а не обычный LIKE.

Используют LIKE там, где достаточно =
Если вам нужно точное совпадение, лучше писать обычное сравнение. LIKE нужен именно тогда, когда вы работаете с шаблоном.

Практика

Проверь себя

Ответьте на вопросы, чтобы закрепить материал:

1
Какой шаблон подойдёт, чтобы найти значения, которые заканчиваются на '.ru'?
2
Что означает шаблон '____' в условии LIKE?
3
Когда вместо LIKE лучше использовать ILIKE?
4
Что вернёт выражение SELECT 'mail.ru' LIKE '%.ru';? Введите только TRUE или FALSE.
5
Напишите запрос к таблице users, который выведет user_id, first_name, email и city только для пользователей, у которых почта содержит фрагмент 'shop', а город указан. Отсортируйте результат по email в алфавитном порядке.
6
Какой шаблон подойдёт, чтобы найти строки, где сначала идёт любая буква, потом 'ван' и больше ничего?
7
Напишите запрос к таблице workers, который выведет worker_id, first_name, position и salary для работников, чья должность не начинается со слова 'Менеджер', а зарплата больше 70000. Более высокие зарплаты должны идти выше.