Мок-собеседование / SQL / Задача 02
Пользователи и заказы:
простой SQL JOIN
Напиши запрос для двух таблиц и объясни, какие строки окажутся в результате.
01 / Условие
Покажи заказы вместе с пользователями
Есть таблицы users(id, name) и orders(id, user_id, total). Поле orders.user_id указывает на users.id.
Выведи для каждого заказа четыре поля: user_id, name, order_id и total. Пользователей без заказов не показывай. Отсортируй строки по user_id, затем по order_id.
02 / Данные
Небольшой набор для проверки
| id | name |
|---|---|
| 1 | Анна |
| 2 | Борис |
| 3 | Вера |
| id | user_id | total |
|---|---|---|
| 101 | 1 | 1200 |
| 102 | 1 | 500 |
| 103 | 3 | 900 |
03 / Твоя работа
Запрос и объяснение
- Напиши полный
SELECTс соединением таблиц и сортировкой. Дай выходным полям названия из условия. - Поясни, почему в условии соединения нужны
users.idиorders.user_id, а не два поляid. - Скажи, сколько строк вернётся для пользователя с двумя заказами и попадёт ли в ответ пользователь без заказов.
- Объясни, что изменится, если вместо
INNER JOINиспользоватьLEFT JOINс таблицейusersслева.
Каждая строка результата описывает один заказ. Не убирай повторяющегося пользователя через DISTINCT: его два заказа должны остаться двумя строками.
04 / Самопроверка
Сверь запрос после своей попытки
Показать решение
SELECT
u.id AS user_id,
u.name,
o.id AS order_id,
o.total
FROM users AS u
INNER JOIN orders AS o ON o.user_id = u.id
ORDER BY u.id, o.id;
Ожидаемые пары (user_id, order_id): (1, 101), (1, 102), (3, 103). Борис не попадёт в результат, потому что у него нет заказа. При LEFT JOIN появится строка Бориса с NULL в полях заказа.