Запрос сначала нужно исправить: UserName неоднозначен, поскольку есть в обеих таблицах. SELECT u.UserName вернёт четыре строки: xxx дважды, yyy и zzz по одному разу.
Какой результат выдаст SQL‑запрос с оператором JOIN
Запрос сначала нужно исправить: 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 вызывает ошибку неоднозначного столбца.