SQL для тестировщика с нуля: SELECT, WHERE и первые запросы
Тестировщику не нужен весь SQL — нужен SELECT, чтобы проверить, что записалось в базу, найти подходящие тестовые данные и подтвердить дефект фактами, а не словами.
Зачем тестировщику SQL
Интерфейс показывает то, что ему велели показать. Он может нарисовать «Заказ оформлен», когда в базе не записалась половина полей. Пока вы не заглянули в данные, вы проверили картинку, а не работу системы.
Три задачи, ради которых SQL и учат:
- Проверить результат. Прошли сценарий — посмотрели, что реально сохранилось.
- Найти данные для теста. Нужен пользователь с тремя заказами и без адреса — ищется одним запросом, а не кликами.
- Доказать дефект. «Сумма в базе 4900, в чеке 5000» звучит иначе, чем «мне кажется, скидка не применилась».
Из чего состоит запрос
Порядок частей жёсткий, менять нельзя:
| Часть | Что задаёт |
|---|---|
| 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 | Объединение условий |
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 — рабочая лошадка тестировщика: так же находятся заказы без пользователя, товары без картинки и другие записи-сироты.
Пять ошибок, на которых теряют время
= NULLвместоIS NULL— запрос возвращает пусто, и кажется, что данных нет.- Забытое условие в
JOIN: получается декартово произведение и тысячи «лишних» строк. - Столбец в
SELECTбез агрегата и безGROUP BY— либо ошибка, либо случайное значение. - Сравнение даты со временем:
created_at = '2026-03-09'не найдёт запись, созданную в 14:30. Нужен диапазон. LIKE '%текст%'на большой таблице — индекс не работает, запрос висит.
UPDATE и DELETE без WHERE меняют всю таблицу. Правило: сначала тот же WHERE в SELECT, посмотреть, какие строки попали, и только потом — на тестовом стенде — превращать в изменение. У тестировщика на проде в норме доступ только на чтение, и это правильно.
Как учиться, чтобы не забыть через неделю
SQL забывается мгновенно, если читать про него, а не писать. Работающий порядок: разобрали конструкцию — сразу написали три запроса на своих данных. Через неделю повторили.
Полезно завести файл с запросами, которые уже пригодились в работе: проверка заказа, поиск дублей, выборка тестового пользователя. Через месяц у вас будет личный справочник, который экономит больше времени, чем любой учебник. Готовая шпаргалка с JOIN и группировкой — в SQL для тестировщика.
Какой диалект SQL учить?
Начинайте с общей части — она одинакова в PostgreSQL, MySQL и остальных. Отличия начинаются в функциях работы с датами и строками, и их проще посмотреть по месту, чем учить заранее.
Нужны ли UPDATE и DELETE?
Понимать — да, применять на проде — нет. Иногда они нужны для подготовки данных на тестовом стенде, и там ими пользуются осторожно, всегда с WHERE.
Где практиковаться, если нет доступа к базе?
На учебной базе. В нашем SQL-тренажёре запрос выполняется по-настоящему и сверяется с эталоном — установка не нужна, всё работает в браузере.
SQL — один из двух-трёх навыков, на которых отсеивают junior чаще всего, и один из самых быстрых в освоении: неделя практики закрывает вопрос. На курсе под него сделан тренажёр с учебной базой магазина — вы пишете запрос, он выполняется, результат сверяется с эталонным. Тренажёр открыт бесплатно, весь курс «Ручной тестировщик» — 14 900 ₽ один раз.