Используйте 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. Для одной строки на клиента нужна отдельная агрегация.