careertools

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.