Отображение всех клиентов вместе с их заказами, включая тех, у кого нет заказов

Используйте LEFT JOIN от customers к orders по customer_id. Он сохраняет каждого клиента, даже если заказов нет; поля заказа тогда будут NULL.

Короткий ответ

Что ответить на собеседовании

Используйте LEFT JOIN от customers к orders по customer_id. Он сохраняет каждого клиента, даже если заказов нет; поля заказа тогда будут NULL.

Подробный разбор

Ответ с пояснениями

Условие

В базе имеются две таблицы: customers и orders. Необходимо вывести список всех клиентов и сопоставить к каждому его заказы. При этом клиент без заказов также должен присутствовать в результате.

CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    created_at DATE,
    updated_at DATE
);
CREATE TABLE orders (
    id INT PRIMARY KEY,
    created_at DATE,
    customer_id INT REFERENCES customers(id)
);

Ответ

Используйте LEFT JOIN от customers к orders по customer_id. Он сохраняет каждого клиента, даже если заказов нет; поля заказа тогда будут NULL.

SELECT c.id AS customer_id, c.name,
       o.id AS order_id, o.created_at AS order_created_at
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
ORDER BY c.id, o.id;

Клиент с несколькими заказами появится в нескольких строках. Если фильтруете заказы, условие обычно размещают в ON, чтобы не исключить клиентов без совпадений через WHERE. Для одной строки на клиента нужна отдельная агрегация.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее