TT-QA

Мок-собеседование / SQL / Задача 02

Пользователи и заказы:
простой SQL JOIN

Напиши запрос для двух таблиц и объясни, какие строки окажутся в результате.

10–15 минутINNER 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 / Данные

Небольшой набор для проверки

users
idname
1Анна
2Борис
3Вера
orders
iduser_idtotal
10111200
1021500
1033900

03 / Твоя работа

Запрос и объяснение

  1. Напиши полный SELECT с соединением таблиц и сортировкой. Дай выходным полям названия из условия.
  2. Поясни, почему в условии соединения нужны users.id и orders.user_id, а не два поля id.
  3. Скажи, сколько строк вернётся для пользователя с двумя заказами и попадёт ли в ответ пользователь без заказов.
  4. Объясни, что изменится, если вместо 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 в полях заказа.

Сообщить о проблеме

Что случилось?