← Назад к вопросам

Для чего нужен оператор like?

1.0 Junior🔥 161 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Для чего нужен оператор LIKE в SQL?

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

Ключевые сценарии использования LIKE:

  1. Поиск по части строки: Например, найти всех клиентов, чьи имена начинаются на «Анн» (Анна, Антон).
  2. Фильтрация данных с вариациями: Поиск email-адресов определённого домена (например, %@gmail.com).
  3. Обработка данных с опечатками или нестандартным форматом: Если в базе могут встречаться разные написания (например, «кофе» и «кофеёк»).
  4. Анализ текстовых полей: Выборка записей, содержащих определённое слово или фрагмент в описании.

Синтаксис и шаблоны:

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

  • % — заменяет любую последовательность символов (включая пустую строку).
  • _ — заменяет ровно один любой символ.

Примеры запросов:

-- Найти товары, название которых начинается на "Apple"
SELECT * FROM products WHERE name LIKE 'Apple%';

-- Найти email из домена example.com
SELECT email FROM users WHERE email LIKE '%@example.com';

-- Найти трёхбуквенные коды, где вторая буква "A"
SELECT code FROM codes WHERE code LIKE '_A_';

-- Найти описания, содержащие слово "срочно" в любом месте
SELECT * FROM orders WHERE description LIKE '%срочно%';

Особенности и ограничения:

  • Регистрозависимость: Поведение LIKE зависит от настроек базы данных (коллации). Например, в MySQL при utf8mb4_unicode_ci поиск будет регистронезависимым, а в PostgreSQL — регистрозависимым. Для регистронезависимого поиска в PostgreSQL используют ILIKE.
  • Производительность: Использование LIKE, особенно с шаблоном, начинающимся на % (например, %текст), может привести к полному сканированию таблицы (FULL SCAN), так как индексы часто неэффективны для таких шаблонов. Оптимизация включает:
    *   Использование **индексов по префиксу** (для шаблонов вида `текст%`).
    *   Рассмотрение полнотекстового поиска (`FULLTEXT` в MySQL, `tsvector` в PostgreSQL) для сложных текстовых запросов.
  • Экранирование специальных символов: Если в шаблоне нужно найти сам символ % или _, его экранируют (например, с помощью ESCAPE в LIKE '100\%' ESCAPE '\').

Практический пример в тестировании:

В QA оператор LIKE часто используется для верификации данных в базах. Например, при тестировании формы регистрации можно проверить, что email-адреса пользователей сохраняются корректно:

-- Проверка, что все email в таблице users содержат символ "@"
SELECT * FROM users WHERE email NOT LIKE '%@%';

Такой запрос выявит некорректные записи, что поможет отловить баги в валидации или обработке данных.

Альтернативы и расширения:

  • SIMILAR TO или регулярные выражения (например, ~ в PostgreSQL) — для более сложных шаблонов.
  • INSTR или POSITION — для поиска позиции подстроки без шаблонов.
  • Полнотекстовый поиск — для морфологического анализа и ранжирования результатов.

Вывод: Оператор LIKE — это мощный инструмент для гибкого поиска по тексту, но его использование требует учёта особенностей производительности и синтаксиса конкретной СУБД. В арсенале QA-инженера он помогает эффективно проверять целостность и корректность текстовых данных в ходе тестирования приложений.

Для чего нужен оператор like? | PrepBro