Приведите пример SQL-запроса с JOIN для соединения таблиц.

«Приведите пример SQL-запроса с JOIN для соединения таблиц.» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные типы JOIN в SQL: INNER JOIN, LEFT (OUTER) JOIN, RIGHT (OUTER) JOIN, FULL (OUTER) JOIN.

Пример 1: INNER JOIN Выборка заказов только для активных пользователей.

SELECT
    u.id AS user_id,
    u.name AS user_name,
    o.id AS order_id,
    o.total_amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id  -- Ключевое условие соединения
WHERE u.is_active = TRUE;

Пример 2: LEFT JOIN Выборка всех пользователей, даже если у них нет заказов.

SELECT
    u.name,
    COUNT(o.id) AS order_count  -- Будет 0 для пользователей без заказов
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;

Пример 3: JOIN с несколькими таблицами и агрегацией

SELECT
    u.name,
    p.name AS product_name,
    SUM(oi.quantity) AS total_quantity_purchased
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN order_items oi ON o.id = oi.order_id
JOIN products p ON oi.product_id = p.id
WHERE o.status = 'completed'
GROUP BY u.id, u.name, p.id, p.name
ORDER BY total_quantity_purchased DESC;

Ключевой момент: INNER JOIN возвращает только строки, где есть совпадение в обеих таблицах. LEFT JOIN возвращает все строки из левой таблицы (users), дополняя их данными из правой (orders) или NULL, если совпадений нет.