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