SQL для тестировщика — 20 основных запросов
QA❤️4Life20 SQL-запросов, которые тестировщик пишет каждый день. От простой выборки до соединения таблиц и группировки. Все примеры — на схеме интернет-магазина: клиенты, заказы, товары.
Канал: QA❤️4Life
Автор: Евгений Гусинец
1. SELECT — вся таблица
SELECT * FROM customers;
Проверить, что в таблице есть данные. Первый запрос перед любым тестом.
2. WHERE с OR — одно из нескольких значений
SELECT * FROM orders WHERE status = 'pending' OR status = 'processing';
Найти заказы, которые ещё не завершены.
3. WHERE с AND — несколько условий
SELECT * FROM customers WHERE city = 'Moscow' AND is_active = true;
Найти активных клиентов из конкретного города.
4. WHERE с AND (3 условия)
SELECT * FROM orders WHERE status = 'shipped' AND total > 5000 AND created_at > '2026-01-01';
Найти дорогие отправленные заказы в этом году.
5. Комбинация OR и AND
SELECT * FROM products WHERE (category = 'Electronics' AND price > 10000) OR (category = 'Books' AND price < 500);
Дорогая электроника или дешёвые книги — два разных сценария в одном запросе.
6. IN — список значений
SELECT * FROM orders WHERE status IN ('pending', 'shipped', 'delivered');
То же, что несколько OR, но короче и читаемее.
7. NOT IN — исключение значений
SELECT * FROM orders WHERE status NOT IN ('cancelled', 'refunded');
Все заказы, кроме отменённых и возвращённых.
8. BETWEEN — диапазон
SELECT * FROM products WHERE price BETWEEN 1000 AND 5000;
Товары в ценовом диапазоне. Включает границы.
9. INSERT — добавление данных
INSERT INTO products (product_id, name, price, category) VALUES (101, 'Wireless Mouse', 2500, 'Electronics');
Добавить новый товар. После вставки — SELECT, чтобы проверить.
10. UPDATE — обновление данных
UPDATE products SET price = 2200 WHERE product_id = 101;
Изменить цену товара. Всегда с WHERE — иначе обновится вся таблица.
11. DELETE — удаление данных
DELETE FROM products WHERE product_id = 101;
Удалить товар. Те же меры предосторожности, что с UPDATE.
12. INSERT + SELECT — проверить вставку
INSERT INTO products (product_id, name, price, category) VALUES (102, 'USB Hub', 1800, 'Electronics');SELECT * FROM products WHERE product_id = 102;
Добавили — сразу проверили, что запись на месте.
13. INNER JOIN — связь двух таблиц
SELECT c.name, o.total, o.status FROM customers c JOIN orders o ON c.customer_id = o.customer_id WHERE c.email = 'ivan@example.com';
Найти все заказы конкретного клиента по email.
14. LEFT JOIN — все записи из левой таблицы
SELECT c.name, o.order_id FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id;
Найти клиентов без заказов. Если по ТЗ все должны иметь заказы — это баг.
15. FULL JOIN — полное внешнее соединение
SELECT c.name, o.order_id FROM customers c FULL JOIN orders o ON c.customer_id = o.customer_id;
Показать всех клиентов и все заказы, даже если нет совпадений.
16. CROSS JOIN — декартово произведение
SELECT p.name, c.name FROM products p CROSS JOIN categories c;
Каждый товар с каждой категорией. Полезно для генерации комбинаций в тестовых данных.
17. COUNT — количество записей
SELECT COUNT(*) FROM orders WHERE status = 'pending';
Сколько заказов ожидают обработки. Сверить с цифрой в админке.
18. GROUP BY — группировка
SELECT status, COUNT(*) FROM orders GROUP BY status;
Распределение заказов по статусам. Быстро увидеть, не зависли ли где-то.
19. GROUP BY + HAVING — фильтр групп
SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id HAVING COUNT(*) > 5;
Найти клиентов с аномально большим числом заказов. WHERE не работает с агрегатами — только HAVING.
20. GROUP BY + ORDER BY — сортировка групп
SELECT category, COUNT(*) AS cnt FROM products GROUP BY category ORDER BY cnt DESC;
Категории товаров по убыванию количества. Удобно для отчётов.
Совет: эти 20 запросов покрывают 90% ежедневных задач тестировщика. Сохрани шпаргалку — пригодится и на работе, и на собеседовании.