Какой результат выдаст SQL‑запрос с оператором JOIN

Запрос сначала нужно исправить: UserName неоднозначен, поскольку есть в обеих таблицах. SELECT u.UserName вернёт четыре строки: xxx дважды, yyy и zzz по одному разу.

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

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

Запрос сначала нужно исправить: UserName неоднозначен, поскольку есть в обеих таблицах. SELECT u.UserName вернёт четыре строки: xxx дважды, yyy и zzz по одному разу.

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

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

Условие

Определите, какие значения будут возвращены запросом:

Select UserName From
dbo.Users u
JOIN dbo.UserActivity ua on
ua.UserName = u.UserName

Даны две таблицы.

Таблица Users:

UserName   Email
xxx        xxx@mail.ru
yyy        yyy@mail.ru
zzz        zzz@mail.ru

Таблица UserActivity:

UserName   ActivityCount   Date
xxx        5               10.01.2024
yyy        8               10.01.2024
zzz        12              10.01.2024
ooo        19              11.02.2024
xxx        4               11.02.2024

Какие строки окажутся в результирующем наборе?

Ответ

Запрос сначала нужно исправить: UserName неоднозначен, поскольку есть в обеих таблицах. SELECT u.UserName вернёт четыре строки: xxx дважды, yyy и zzz по одному разу.

INNER JOIN создаёт строку для каждой совпавшей пары. В UserActivity у xxx две записи, поэтому его имя повторится; ooo не имеет пары в Users и не попадёт в результат.

SELECT u.UserName
FROM dbo.Users u
JOIN dbo.UserActivity ua ON ua.UserName = u.UserName;

Без ORDER BY порядок этих четырёх строк не гарантирован. Если нужны только уникальные пользователи с активностью, используйте DISTINCT либо EXISTS. Исходный неквалифицированный SELECT UserName в SQL Server вызывает ошибку неоднозначного столбца.

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

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

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

Подробнее