Для связи многие-ко-многим нужна связующая таблица. Выберите направления, для которых EXISTS хотя бы одна связь с преподавателем.
SQL‑запрос для получения направлений обучения с назначенными преподавателями
Для связи многие-ко-многим нужна связующая таблица. Выберите направления, для которых 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 восстановить отношение между таблицами нельзя. Внешние ключи обеспечивают корректность связей, а уникальность пары идентификаторов предотвращает дубли назначений.