Зачем нужен LIKE в SQL?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Основное назначение оператора 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, а важный инструмент исследовательского тестирования, валидации данных и отладки. Он позволяет гибко проверять соответствие данных бизнес-правилам, искать аномалии и тестировать функционал поиска в условиях, максимально приближенных к действиям реального пользователя. Понимание его работы напрямую влияет на глубину и эффективность тестирования, связанного с данными.