SQL для тестировщика с нуля: SELECT, WHERE и первые запросы

Тестировщику не нужен весь SQL — нужен SELECT, чтобы проверить, что записалось в базу, найти подходящие тестовые данные и подтвердить дефект фактами, а не словами.

Зачем тестировщику SQL

Интерфейс показывает то, что ему велели показать. Он может нарисовать «Заказ оформлен», когда в базе не записалась половина полей. Пока вы не заглянули в данные, вы проверили картинку, а не работу системы.

Три задачи, ради которых SQL и учат:

Из чего состоит запрос

Порядок частей жёсткий, менять нельзя:

ЧастьЧто задаёт
SELECTкакие столбцы показать
FROMиз какой таблицы
WHEREкакие строки оставить
GROUP BYпо чему сгруппировать
HAVINGкакие группы оставить
ORDER BYкак отсортировать
LIMITсколько строк вернуть

Выполняется запрос в другом порядке: сначала FROM, потом WHERE, потом группировка, и только в конце SELECT. Отсюда правило, на котором спотыкаются: в WHERE нельзя сослаться на псевдоним из SELECT, а в ORDER BY — можно.

Самый первый рабочий запрос выглядит так:

SELECT id, email, status, created_at FROM users WHERE status = 'active' ORDER BY created_at DESC LIMIT 20;

Привычку ставить LIMIT стоит завести сразу: на таблице в миллион строк запрос без ограничения повесит и вас, и стенд.

Условия в WHERE

УсловиеЧто делает
= <> > < >= <=Обычное сравнение
BETWEEN 10 AND 20Диапазон, обе границы включены
IN ('new', 'paid')Одно из перечисленного
LIKE 'test%'Начинается с «test»; % — любые символы, _ — ровно один
IS NULLЗначение отсутствует
AND / OR / NOTОбъединение условий
⚠️ NULL — это не значение, а его отсутствие

WHERE phone = NULL не найдёт ничего, даже если пустых телефонов тысяча: сравнение с NULL всегда даёт «неизвестно». Нужно IS NULL. Та же ловушка с отрицанием: WHERE status <> 'paid' не вернёт строки, где статус пуст, хотя вы этого ждёте.

Задачи, которые встретятся в первую неделю

Проверить только что созданный заказ. Прошли сценарий покупки, взяли номер заказа из интерфейса:

SELECT id, status, total, promo_code, created_at FROM orders WHERE id = 10432;

Сверяем каждое поле с тем, что вводили. Особое внимание расчётным: сумма, скидка, статус.

Найти дубли по почте. Проверка уникальности, которую часто забывают:

SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) > 1;

Найти подходящего пользователя для теста. Например, без единого заказа:

SELECT u.id, u.email FROM users u LEFT JOIN orders o ON o.user_id = u.id WHERE o.id IS NULL LIMIT 5;

Связка LEFT JOIN плюс IS NULL — рабочая лошадка тестировщика: так же находятся заказы без пользователя, товары без картинки и другие записи-сироты.

Пять ошибок, на которых теряют время

  1. = NULL вместо IS NULL — запрос возвращает пусто, и кажется, что данных нет.
  2. Забытое условие в JOIN: получается декартово произведение и тысячи «лишних» строк.
  3. Столбец в SELECT без агрегата и без GROUP BY — либо ошибка, либо случайное значение.
  4. Сравнение даты со временем: created_at = '2026-03-09' не найдёт запись, созданную в 14:30. Нужен диапазон.
  5. LIKE '%текст%' на большой таблице — индекс не работает, запрос висит.
⚠️ На боевой базе — только чтение

UPDATE и DELETE без WHERE меняют всю таблицу. Правило: сначала тот же WHERE в SELECT, посмотреть, какие строки попали, и только потом — на тестовом стенде — превращать в изменение. У тестировщика на проде в норме доступ только на чтение, и это правильно.

Как учиться, чтобы не забыть через неделю

SQL забывается мгновенно, если читать про него, а не писать. Работающий порядок: разобрали конструкцию — сразу написали три запроса на своих данных. Через неделю повторили.

Полезно завести файл с запросами, которые уже пригодились в работе: проверка заказа, поиск дублей, выборка тестового пользователя. Через месяц у вас будет личный справочник, который экономит больше времени, чем любой учебник. Готовая шпаргалка с JOIN и группировкой — в SQL для тестировщика.

Какой диалект SQL учить?

Начинайте с общей части — она одинакова в PostgreSQL, MySQL и остальных. Отличия начинаются в функциях работы с датами и строками, и их проще посмотреть по месту, чем учить заранее.

Нужны ли UPDATE и DELETE?

Понимать — да, применять на проде — нет. Иногда они нужны для подготовки данных на тестовом стенде, и там ими пользуются осторожно, всегда с WHERE.

Где практиковаться, если нет доступа к базе?

На учебной базе. В нашем SQL-тренажёре запрос выполняется по-настоящему и сверяется с эталоном — установка не нужна, всё работает в браузере.

SQL — один из двух-трёх навыков, на которых отсеивают junior чаще всего, и один из самых быстрых в освоении: неделя практики закрывает вопрос. На курсе под него сделан тренажёр с учебной базой магазина — вы пишете запрос, он выполняется, результат сверяется с эталонным. Тренажёр открыт бесплатно, весь курс «Ручной тестировщик» — 14 900 ₽ один раз.

Начать бесплатно Программа курса