QA Interview Hub · База знань · Тести

Manual QA

SQL для QA

перевірка даних у базі

Які базові SQL-запити має знати QA?

SELECT з фільтрацією, сортуванням і обмеженням, агрегатні функції і групування.

-- останні 10 транзакцій користувача
SELECT id, amount, currency, status, created_at
FROM transactions
WHERE user_id = 1042
ORDER BY created_at DESC
LIMIT 10;

-- кількість і сума транзакцій за статусом
SELECT status, COUNT(*) AS cnt, SUM(amount) AS total
FROM transactions
WHERE created_at >= '2026-10-01'
GROUP BY status
HAVING COUNT(*) > 0;
На співбесіді: Я впевнено використовую SELECT з фільтрацією через WHERE, сортуванням і LIMIT, а також агрегатні функції COUNT і SUM з GROUP BY. HAVING — для фільтрації вже згрупованих результатів, на відміну від WHERE, який фільтрує рядки до групування.

Які є види JOIN?

  • INNER JOIN — лише рядки, що мають пару в обох таблицях.
  • LEFT JOIN — усі рядки лівої таблиці, з правої — якщо є пара, інакше NULL.
  • RIGHT JOIN — навпаки.
  • FULL JOIN — усі рядки обох таблиць.

LEFT JOIN з перевіркою на NULL — зручний спосіб знайти «сиротів»: записи без пов'язаних даних.

-- транзакції без запису в журналі аудиту (а він має бути у кожної)
SELECT t.id, t.amount
FROM transactions t
LEFT JOIN audit_log a ON a.transaction_id = t.id
WHERE a.id IS NULL;
На співбесіді: INNER JOIN повертає лише рядки з парою в обох таблицях, LEFT JOIN — усі рядки лівої, а з правої — якщо є. Я часто використовую LEFT JOIN з перевіркою на NULL, щоб знайти записи, у яких немає обов'язкових пов'язаних даних, наприклад транзакції без запису в журналі аудиту.

Як ти використовуєш SQL для перевірки даних?

  • Після дії в UI або API — перевірити, що запис з'явився з правильними значеннями.
  • Знайти дублікати.
  • Перевірити цілісність: немає записів без пов'язаних даних.
  • Підготувати тестові дані або знайти користувача в потрібному стані.

На спільних середовищах — лише SELECT, якщо немає явного дозволу змінювати дані.

-- дублікати платежів з тим самим idempotency key
SELECT idempotency_key, COUNT(*)
FROM payments
GROUP BY idempotency_key
HAVING COUNT(*) > 1;
На співбесіді: Після дії в UI чи API я перевіряю в базі, що запис створився з правильними значеннями. Також шукаю дублікати й записи без обов'язкових зв'язків і знаходжу користувачів у потрібному стані для тестів. На спільних середовищах лише читаю, якщо немає дозволу змінювати дані.