Названия городов и их жители

Соедините cities и users по city_id. LEFT JOIN сохранит также города без жителей, а INNER JOIN покажет только существующие пары город–пользователь.

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

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

Соедините cities и users по city_id. LEFT JOIN сохранит также города без жителей, а INNER JOIN покажет только существующие пары город–пользователь.

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

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

Условие

Получите список названий городов вместе с именами пользователей, проживающих в каждом из них.

-- Таблица "cities"
create table cities (
    id    serial primary key,
    name  text not null
);

insert into cities (name)
values
    ('Москва'),
    ('Санкт-Петербург'),
    ('Краснодар');

-- Таблица "users"
create table users (
    id      serial primary key,
    name    text not null,
    city_id int not null references cities(id)
);

insert into users (name, city_id)
values
    ('Иван', 1),
    ('Анна', 1),
    ('Олег', 2);

Ответ

Соедините cities и users по city_id. LEFT JOIN сохранит также города без жителей, а INNER JOIN покажет только существующие пары город–пользователь.

Вариант со всеми городами:

SELECT c.name AS city, u.name AS resident
FROM cities AS c
LEFT JOIN users AS u ON u.city_id = c.id
ORDER BY c.id, u.id;

Получатся Москва–Иван, Москва–Анна, Санкт-Петербург–Олег и Краснодар–NULL. Если нужны только города с пользователями, замените LEFT JOIN на JOIN. Несколько пользователей дают несколько строк, а не список имён в одной ячейке.

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

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

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

Подробнее