Проверяет умение строить и оптимизировать SQL-запросы с множественными связями между таблицами.
Для сложных JOIN:
Чётко определите связи между таблицами (через ON).
Используйте псевдонимы (AS) для удобства.
Разбивайте запрос на подзапросы или CTE.
Добавляйте индексы на ключи соединения.
Пример: SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id.
Сложные JOIN возникают, когда нужно объединить данные из 3+ таблиц. Основные шаги:
Определите связи:
INNER JOIN: Только совпадающие строки.
LEFT JOIN: Все строки левой таблицы + совпадения справа.
SELECT
o.order_id,
c.name AS customer_name,
p.product_name
FROM orders o
JOIN customers c ON o.customer_id = c.id
LEFT JOIN products p ON o.product_id = p.id;Используйте псевдонимы:
Упрощают чтение запроса:
SELECT
ord.id,
cust.name
FROM orders AS ord -- Псевдоним
JOIN customers AS cust ON ord.customer_id = cust.id;Разбивайте на CTE/подзапросы:
Если запрос слишком сложный:
WITH customer_orders AS (
SELECT customer_id, COUNT(*) AS total_orders
FROM orders
GROUP BY customer_id
)
SELECT c.name, co.total_orders
FROM customers c
JOIN customer_orders co ON c.id = co.customer_id;Оптимизация:
Индексы на колонках в ON и WHERE.
Избегайте SELECT * — выбирайте только нужные поля.
Используйте EXPLAIN ANALYZE для поиска узких мест.
Вывод:
Сложные JOIN требуют аккуратности и тестирования. Всегда проверяйте план выполнения запроса.