SQL для тестировщика – Часть 1: SELECT и WHERE

SQL для тестировщика – Часть 1: SELECT и WHERE

QA❤️4Life

Расширенная шпаргалка по SQL для тестировщика: в короткой версии был обзор, здесь разбираем каждый оператор – что делает, для чего нужен и где подстерегает ловушка. Полезно и в ежедневной работе, и на собеседованиях.

Канал: QA❤️4Life
Автор: Евгений Гусинец


SQL для тестировщика – Часть 1 из 5: SELECT и WHERE

Демо-схема для всех примеров серии:

  • users (id, email, status, created_at)
  • orders (id, user_id, sum, status, created_at)
  • payments (id, order_id, amount, created_at)

SELECT: база

Что делает. Выбирает столбцы из таблицы. Перечисляйте столбцы явно, а не через *: запрос читается быстрее, не тянет лишний трафик и не ломается, когда схему меняют.

SELECT id, email, status
FROM users;

Зачем тестировщику. Проверяешь конкретные поля – запрашивай только их. Алиасы AS сокращают длинные имена: SELECT u.email AS mail FROM users u.

WHERE: сравнения

Что делает. Фильтрует строки до того, как что-то посчитается. Операторы: =, <> (не равно, пишут ещё и !=), >, <, >=, <=.

SELECT id, sum
FROM orders
WHERE sum > 10000;

Зачем. Выборка граничных значений – классика проверок: большие суммы, свежие записи, конкретный статус.

AND / OR / NOT и скобки

Что делает. Комбинирует условия. AND сильнее OR: без скобок условие склеится не так, как вы думаете.

SELECT id, sum
FROM orders
WHERE status = 'paid'
  AND (sum > 1000 OR sum < 100);

Зачем. Скобки – бесплатная страховка от логических багов в собственном запросе. Проверка сама должна быть корректной.

IN / NOT IN

Что делает. Заменяет цепочку OR по одному полю. NOT IN – всё, кроме списка.

SELECT id, email
FROM users
WHERE status IN ('active', 'banned');

Зачем. Проверка на наборе статусов или id. Ловушка NOT IN с NULL – в части 4, там она заслуживает отдельного разбора.

LIKE / NOT LIKE

Что делает. Поиск по шаблону: % – любое количество символов, _ – ровно один. Регистрозависимость зависит от СУБД, в PostgreSQL есть регистронезависимый ILIKE.

SELECT id, email
FROM users
WHERE email LIKE '%test%';

Зачем. Найти тестовые аккаунты, битые данные по маске, email без собаки (NOT LIKE '%_@%._%').

BETWEEN и главная ловушка с датами

Что делает. Диапазон включительно с обеих сторон.

SELECT id
FROM orders
WHERE created_at >= '2024-01-01'
  AND created_at < '2024-02-01';

Зачем. Проверки за период. Ловушка: BETWEEN '2024-01-01' AND '2024-01-31' при поле с временем отсечёт весь 31-й после полуночи. Правильный паттерн – нижняя граница включительно, верхняя исключительно, как в примере выше.

IS NULL / IS NOT NULL

Что делает. Проверка на пустое значение. NULL – это «значения нет», и он не равен ничему, даже другому NULL: сравнение = NULL всегда молча вернёт пустоту.

SELECT id, email
FROM users
WHERE email IS NULL;

Зачем. NULL в поле, где его быть не должно, – кандидат в баги. Проверка NULL-значений – обязательная часть любого теста данных.

ORDER BY

Что делает. Сортирует результат: ASC по возрастанию (по умолчанию), DESC по убыванию. Можно по нескольким столбцам через запятую.

SELECT id, created_at
FROM orders
ORDER BY created_at DESC, id DESC;

Зачем. «Покажи свежие записи первыми» – самый частый запрос при разборе бага.

LIMIT / OFFSET

Что делает. Обрезает результат: LIMIT – сколько строк отдать, OFFSET – сколько пропустить. В SQL Server то же самое – TOP.

SELECT id, email
FROM users
ORDER BY id DESC
LIMIT 50;

Зачем. Не выгружать миллион строк, когда хватает последних пятидесяти.

DISTINCT

Что делает. Убирает дубликаты строк результата.

SELECT DISTINCT status
FROM orders;

Зачем. Быстро увидеть полный набор значений поля. Счёт по уникальным – COUNT(DISTINCT id) – раскрываем в части 2.

Резюме части 1

  • Столбцы перечисляй явно, * – только для быстрого взгляда.
  • Скобки в AND/OR ставь всегда, приоритет обманчив.
  • Диапазон дат – «>= начало AND < конец»: BETWEEN с датой без времени теряет хвост дня.
  • NULL проверяется только через IS NULL.
  • ORDER BY … DESC LIMIT N – способ увидеть последние записи.

Report Page