Запрос, выдающий актеров, которые снимались только в оскарных фильмах - MySQL
Формулировка задачи:
Нужно переделать запрос, чтобы выдавал только актеров, которые снимались только в оскарных фильмах. На данный момент запрос выдаёт всех актеров, которые снимались хотя бы 1 оскарном фильме
Create Function ActorsOscars() Returns table as return ( Select Люди.ФИО, Люди.дата_рождения From Люди, Актерский_Состав, Оскары Where Оскары.id_фильма = Актёрский_состав.id_фильма and Актерский_состав.id_человека = Люди.id_человека
Решение задачи: «Запрос, выдающий актеров, которые снимались только в оскарных фильмах»
textual
Листинг программы
Select Люди.ФИО, Люди.дата_рождения From Люди WHERE id_человека IN ( SELECT Актерский_состав.id_человека FROM Актёрский_состав LEFT JOIN Оскары ON Актёрский_состав.id_фильма = Оскары.id_фильма GROUP BY Актерский_состав.id_человека HAVING COUNT(DISTINCT Актёрский_состав.id_фильма) = COUNT(DISTINCT Оскары.id_фильма) )
Объяснение кода листинга программы
В этом коде происходит следующее:
- Внутренний запрос (вложенный в другой запрос) выбирает из таблицы
Актерский_состав
всех людей, которые снимались в оскароносных фильмах. Это делается путем объединения таблицыАктерский_состав
с таблицейОскары
по полюid_фильма
и последующим подсчетом количества уникальныхid_фильма
в каждой группе, образованной поid_человека
. Если количество уникальныхid_фильма
в группе равно количеству уникальныхid_фильма
во всей таблицеОскары
, то человек считается снимавшимся только в оскароносных фильмах. - Внешний запрос выбирает из таблицы
Люди
ФИО и дату рождения людей, чьиid_человека
присутствуют в результирующем наборе данных внутреннего запроса.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д