💾 SQL для тестировщика: SELECT, JOIN, подзапросы
⚙️ SELECT – база
Достаём данные и сразу фильтруем:
SELECT id, email, status
FROM users
WHERE created_at >= '2024-01-01'
ORDER BY id DESC
LIMIT 50;
Полезно: COUNT(*), DISTINCT, LIKE '%test%', IN ('active','banned'), BETWEEN.
Поиск дублей: GROUP BY email HAVING COUNT(*) > 1.
📋 JOIN без боли
JOIN соединяет таблицы по ключу:
INNER JOIN → только совпадения
LEFT JOIN → всё слева + совпадения (нет пары → NULL)
RIGHT JOIN → зеркально LEFT
FULL JOIN → всё из обеих (нет в MySQL)
Заказы без оплаты – классика на собесах:
SELECT o.id
FROM orders o
LEFT JOIN payments p ON p.order_id = o.id
WHERE p.id IS NULL;
🔍 Подзапросы
Запрос внутри запроса:
SELECT * FROM users
WHERE id IN (SELECT user_id FROM orders WHERE sum > 10000);
Скалярный в SELECT – счётчик заказов:
SELECT name,
(SELECT COUNT(*) FROM orders o WHERE o.user_id = u.id) AS cnt
FROM users u;
✅ Чек-лист
– LEFT JOIN + условие на правую таблицу в WHERE превращает его в INNER. Ловушка.
– NULL не равен даже NULL: сравнение через = не работает, пиши IS NULL.
– JOIN «один ко многим» дублирует строки, суммы растут. Лечится DISTINCT или подзапросом.
– Сверь COUNT до и после миграции.
⚠️ Грабли
– Забытый WHERE в UPDATE/DELETE меняет всю таблицу: сначала SELECT, потом изменение.
– WHERE date = '2024-01-01' пропустит время после полуночи. Бери диапазон: >= '2024-01-01' AND < '2024-01-02'.
📚 Источники
Alan Beaulieu, «Learning SQL», O'Reilly, 3rd ed.
Viescas, Hernandez, «SQL Queries for Mere Mortals», 4th ed.
📖 Расширенная версия – на Telegraph:
🔗 Часть 1 – SELECT и WHERE
🔗 Часть 2 – Агрегаты, GROUP BY, HAVING
🔗 Часть 3 – JOIN
🔗 Часть 4 – Подзапросы, UNION, CASE
🔗 Часть 5 – Оконные функции и копилка запросов
━━━━━━━━━━━━━━━━━━━━
📢 QA❤️4Life — канал о тестировании
🤖 SyntxAI — все самые нужные нейросети в одном сервисе
🔒 MaxVpn — Удобный и быстрый VPN
🧠 Google AI Pro — подписка на личный Google-аккаунт на 18 месяцев за 990₽
━━━━━━━━━━━━━━━━━━━━
👑 Авторский курс по созданию персональных ИИ-агентов
#QA #Тестирование #SQL #БазыДанны
Post #4713
572

- 🔥 3
- 👍 2