SQL для QA: базовые запросы которые реально нужны
SQL — must-have навык для QA. Без него каждое исследование бага упирается в «спрошу у разработчиков». 80% реальных QA-задач закрываются 10 базовыми запросами. Не нужно знать оптимизацию query plan и stored procedures — достаточно базы.
Базовый SELECT
SELECT email, created_at FROM users WHERE id = 123;
Получаешь данные конкретного юзера. Самое частое использование — «юзер сказал что не получил email».
Фильтры
SELECT * FROM orders WHERE status = 'pending' AND created_at > '2026-01-01';
— =, !=, >, <, >=, <= — обычные сравнения.
— IN ('a', 'b', 'c') — несколько значений.
— BETWEEN x AND y — диапазон.
— LIKE '%john%' — частичное совпадение (% = любые символы).
— IS NULL / IS NOT NULL — отсутствие/наличие значения.
Сортировка и ограничение
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
Последние 10 регистраций.
Count
SELECT COUNT(*) FROM orders WHERE created_at > '2026-01-01';
Сколько заказов в этом году.
SELECT status, COUNT(*) FROM orders GROUP BY status;
Сколько заказов в каждом статусе.
JOIN
Главный навык. Связывает таблицы:
SELECT u.email, o.total
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE o.status = 'failed';
Кто из юзеров получил failed заказы.
Три типа JOIN которые нужны:
— INNER JOIN (или просто JOIN): только строки где совпадение есть в обеих таблицах. — LEFT JOIN: все строки из левой таблицы, даже если нет совпадения в правой. — RIGHT JOIN: наоборот (редко используется).
Пример с LEFT JOIN — найти юзеров без заказов:
SELECT u.email
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;
Аггрегации
SELECT user_id, SUM(total) as spent
FROM orders
WHERE status = 'completed'
GROUP BY user_id
ORDER BY spent DESC
LIMIT 10;
Топ-10 юзеров по сумме покупок.
UPDATE (осторожно!)
UPDATE users SET email_verified = true WHERE id = 123;
Обычно QA это не делает в продакшене. На staging — да, когда нужно подменить тестовые данные.
⚠️ Без WHERE — обновит ВСЕ строки. Серьёзно. Сначала пиши WHERE, потом SET.
DELETE (ещё осторожнее)
DELETE FROM test_users WHERE created_at < '2025-01-01';
Аналогично — без WHERE удалит всё. Сначала проверь SELECT с тем же WHERE, потом меняй на DELETE.
Транзакции
Если делаешь несколько изменений и хочешь rollback в случае проблем:
BEGIN;
UPDATE users SET balance = balance - 100 WHERE id = 1;
UPDATE users SET balance = balance + 100 WHERE id = 2;
COMMIT; -- или ROLLBACK; если что-то пошло не так
Что часто нужно в QA-работе
✅ Найти юзера по email: SELECT * FROM users WHERE email = 'X'.
✅ Найти заказ по ID: SELECT * FROM orders WHERE id = X.
✅ Проверить что событие записалось: SELECT * FROM events WHERE user_id = X ORDER BY created_at DESC LIMIT 10.
✅ Сравнить количество: «должно быть 5 строк, а есть…» — COUNT.
✅ Найти что есть в одной таблице, но нет в другой: LEFT JOIN + IS NULL.
Тулзы
— DBeaver — бесплатный универсальный SQL client. Подключается к любым БД. — TablePlus — премиум, более удобный для Mac. — psql / mysql cli — терминал, минимализм. — pgAdmin — для Postgres-специфики.
Что НЕ нужно знать на старте
- Stored procedures.
- Triggers.
- Window functions.
- Optimization (EXPLAIN, indexes).
- Денормализация.
Это для senior. Junior QA с 10 базовыми запросами выше — уже самостоятельный.
Что делать сейчас
✅ Поставь DBeaver, подключись к staging-БД своего проекта. Раз — мужественно посмотри что там за схема.
✅ Каждый раз когда что-то у тебя спрашивают «дай мне данные про юзера X» — попробуй найти сам через SQL вместо «спрошу у разработки».
✅ Через 2 недели — заметно станет легче.
Подробнее: SQLBolt — интерактивный курс, PostgreSQL Tutorial.