d. Записи только о тех клиентах и заказах, если у клиентов есть заказы

Первый INNER JOIN действительно возвращает пары клиентов и их заказов. Во втором запросе не хватает группировки и условия HAVING COUNT(*) > 10, чтобы оставить клиентов с более чем десятью заказами.

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

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

Первый INNER JOIN действительно возвращает пары клиентов и их заказов. Во втором запросе не хватает группировки и условия HAVING COUNT(*) > 10, чтобы оставить клиентов с более чем десятью заказами.

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

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

Условие

d. Записи только о тех клиентах и заказах, если у клиентов есть заказы

select * from Clients inner join Orders on Clients.ClientId = Orders.ClientId

g. Клиенты, у которых заказов больше 10

select * from Clients inner join Orders on Clients.ClientId = Orders.ClientId

Ответ

Первый INNER JOIN действительно возвращает пары клиентов и их заказов. Во втором запросе не хватает группировки и условия HAVING COUNT(*) > 10, чтобы оставить клиентов с более чем десятью заказами.

Если нужны именно клиенты без повторения строки на каждый заказ:

SELECT c.*
FROM Clients AS c
JOIN (
    SELECT ClientId
    FROM Orders
    GROUP BY ClientId
    HAVING COUNT(*) > 10
) AS active ON active.ClientId = c.ClientId;

Для первого пункта исходный INNER JOIN корректен, но клиент с несколькими заказами появится несколько раз. Если нужны только клиенты, у которых есть хотя бы один заказ, удобнее WHERE EXISTS. COUNT(*) здесь считает строки Orders; ограничения по статусу или периоду нужно добавить отдельно.

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

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

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

Подробнее