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

Объяснение кода листинга программы

В этом коде происходит следующее:

  1. Внутренний запрос (вложенный в другой запрос) выбирает из таблицы Актерский_состав всех людей, которые снимались в оскароносных фильмах. Это делается путем объединения таблицы Актерский_состав с таблицей Оскары по полю id_фильма и последующим подсчетом количества уникальных id_фильма в каждой группе, образованной по id_человека. Если количество уникальных id_фильма в группе равно количеству уникальных id_фильма во всей таблице Оскары, то человек считается снимавшимся только в оскароносных фильмах.
  2. Внешний запрос выбирает из таблицы Люди ФИО и дату рождения людей, чьи id_человека присутствуют в результирующем наборе данных внутреннего запроса.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы