SQL‑запрос для получения направлений обучения с назначенными преподавателями

Для связи многие-ко-многим нужна связующая таблица. Выберите направления, для которых EXISTS хотя бы одна связь с преподавателем.

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

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

Для связи многие-ко-многим нужна связующая таблица. Выберите направления, для которых EXISTS хотя бы одна связь с преподавателем.

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

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

Условие

В организации существует набор преподавателей и набор учебных направлений, по которым они проводят занятия. Один преподаватель может работать сразу в нескольких направлениях, а в каждом направлении может задействоваться несколько преподавателей. У таблицы преподавателей (instructors) имеются два столбца: full_name и position, у таблицы направлений (courses) – единственный столбец: name. В некоторых направлениях преподаватели могут отсутствовать. Требуется составить SQL‑запрос, который вернёт все направления, в которых присутствуют хотя бы один преподаватель.

Ответ

Для связи многие-ко-многим нужна связующая таблица. Выберите направления, для которых EXISTS хотя бы одна связь с преподавателем.

В условии не приведены ключи и таблица связей. Предположим наличие courses.id, instructors.id и instructor_course(course_id, instructor_id):

SELECT c.name
FROM courses AS c
WHERE EXISTS (
    SELECT 1
    FROM instructor_course AS ic
    JOIN instructors AS i ON i.id = ic.instructor_id
    WHERE ic.course_id = c.id
);

EXISTS не размножает направление, если у него несколько преподавателей. По одним столбцам full_name, position и name восстановить отношение между таблицами нельзя. Внешние ключи обеспечивают корректность связей, а уникальность пары идентификаторов предотвращает дубли назначений.

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

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

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

Подробнее