Запрос, выдающий актеров, которые снимались только в оскарных фильмах - 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_человекаприсутствуют в результирующем наборе данных внутреннего запроса.