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

Зачем нужен LIKE в SQL?

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

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

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

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

Основное назначение оператора LIKE

LIKE — это оператор в языке SQL, используемый для поиска по заданному шаблону (паттерну) в текстовых столбцах. Его фундаментальное назначение — выполнение не точного, а частичного (паттернного) совпадения строк, когда точное значение неизвестно, известно лишь его начало, окончание или определенная последовательность символов. В условиях тестирования, особенно при валидации данных, проверке корректности генерации строк или поиске записей по неточным критериям, LIKE становится незаменимым инструментом.

Ключевые сценарии использования в контексте QA

В работе QA-инженера оператор LIKE применяется в нескольких критически важных областях:

  • Валидация данных и поиск записей по маске: Часто требования к данным предполагают наличие определенного шаблона (например, номер заказа должен начинаться с префикса ORD-, а email заканчиваться на @company.com). LIKE позволяет легко проверить такие условия.

    -- Найти все заказы, сгенерированные в январе 2024 (если их ID содержит дату)
    SELECT * FROM orders WHERE order_id LIKE 'ORD-202401%';
    -- Проверить, что все служебные emails пользователей корректны
    SELECT * FROM users WHERE work_email LIKE '%@ourcompany.com';
    
  • Поиск данных при неточных входных критериях: Во время тестирования поискового функционала или фильтров можно имитировать поведение пользователя, который помнит лишь часть названия товара или имени.

    -- Найти все товары, в названии которых есть слово 'Pro' (например, iPhone Pro, Galaxy Pro)
    SELECT * FROM products WHERE product_name LIKE '%Pro%';
    
  • Анализ логов и системных сообщений в БД: Если приложение пишет логи или статусы в таблицы, LIKE помогает отфильтровать записи по ключевым словам ошибок.

    -- Найти все записи в логах, содержащие сообщения об ошибках уровня ERROR
    SELECT * FROM system_logs WHERE log_message LIKE '%ERROR%';
    
  • Тестирование граничных случаев и санитизации ввода: LIKE можно использовать для проверки уязвимостей, таких как SQL-инъекция, или для поиска специальных символов в данных.

    -- Проверить, нет ли в поле комментария потенциально опасных последовательностей
    SELECT * FROM comments WHERE comment_text LIKE '%--%' OR comment_text LIKE '%/*%';
    

Синтаксис и специальные символы-заполнители

Мощь LIKE определяется двумя основными wildcards (символами-заполнителями):

  • % (процент): Представляет собой ноль, один или любое количество символов. Это наиболее часто используемый заполнитель.

    -- Найти имена, начинающиеся на 'Ал'
    WHERE name LIKE 'Ал%'  -- (Алексей, Александр, Алёна)
    -- Найти имена, оканчивающиеся на 'ей'
    WHERE name LIKE '%ей'  -- (Алексей, Николай)
    -- Найти имена, содержащие 'лекс' в любой части
    WHERE name LIKE '%лекс%' -- (Алексей, Александра)
    
  • _ (нижнее подчеркивание): Представляет ровно один любой символ. Полезен для поиска с известной длиной шаблона.

    -- Найти коды из 5 символов, где первые три - 'ABC'
    WHERE code LIKE 'ABC__'
    -- Найти имена из 5 букв, начинающиеся на 'М' и заканчивающиеся на 'р'
    WHERE name LIKE 'М___р' -- (Матвей, Макар)
    

Пример комплексного запроса для QA-задачи

Представим сценарий: нужно проверить, что система корректно присваивает временные email-адреса пользователям, зарегистрировавшимся через социальные сети (их логин может быть soc_<id>_temp@domain.com), и найти среди них тех, чей ID находится в определенном диапазоне (например, от 100 до 999).

-- Поиск тестовых пользователей из соц. сетей с ID от 100 до 999
SELECT user_id, username, email
FROM users
WHERE email LIKE 'soc\_%\_temp@domain.com' ESCAPE '\'
  AND SUBSTRING_INDEX(SUBSTRING_INDEX(email, '_', 2), '_', -1) BETWEEN 100 AND 999;
-- Примечание: Функции для извлечения ID (SUBSTRING_INDEX) могут отличаться в зависимости от СУБД.

Важные замечания для тестировщика

  • Производительность: Использование LIKE с шаблоном, начинающимся с % (например, %keyword), обычно приводит к полному сканированию таблицы (FULL TABLE SCAN), так как индекс по текстовому полю в этом случае часто не может быть использован. Это важно учитывать при тестировании производительности. Поиск по префиксу (keyword%) гораздо более эффективен.
  • Чувствительность к регистру: Поведение LIKE в отношении регистра зависит от коллации (collation) базы данных и настроек столбца. 'Text' LIKE 't%' может вернуть TRUE или FALSE. Всегда уточняйте это в настройках БД тестового окружения.
  • Экранирование: Если нужно найти сам символ % или _, его необходимо экранировать с помощью ключевого слова ESCAPE.
    -- Найти записи, содержащие строку 'discount_50%'
    WHERE promotion_text LIKE '%discount\_50\%%' ESCAPE '\';
    

Итог: Для QA-инженера LIKE — это не просто оператор SQL, а важный инструмент исследовательского тестирования, валидации данных и отладки. Он позволяет гибко проверять соответствие данных бизнес-правилам, искать аномалии и тестировать функционал поиска в условиях, максимально приближенных к действиям реального пользователя. Понимание его работы напрямую влияет на глубину и эффективность тестирования, связанного с данными.