0% ont trouvé ce document utile (0 vote)
237 vues3 pages

Requêtes SQL sur les acteurs et films

Ce document présente un schéma de base de données sur les films, les cinémas et les projections. Il propose 8 requêtes SQL à réaliser sur cette base en utilisant des jointures et des fonctions d'agrégation. Le corrigé détaille la résolution de chaque requête sous forme de commandes SQL.

Transféré par

YOUNES MOUSTAQUIM
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
237 vues3 pages

Requêtes SQL sur les acteurs et films

Ce document présente un schéma de base de données sur les films, les cinémas et les projections. Il propose 8 requêtes SQL à réaliser sur cette base en utilisant des jointures et des fonctions d'agrégation. Le corrigé détaille la résolution de chaque requête sous forme de commandes SQL.

Transféré par

YOUNES MOUSTAQUIM
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Bases de données – ING1

TD 8 : Jointures et requêtes complexes


Nous réutilisons le schéma relationnel du dernier TD sur les films, cinéma et projection :
– Individu(num_ind, nom, prenom)
– Jouer(num_ind, num_film, role)
– Film(num_film, num_ind, titre, genre, annee)
– Projection(num_cine, num_film, pdate)
– Cinéma(num_cine, nom, adresse)

En utilisant des fonctions d’agrégat et des jointures, exprimez les requêtes suivantes
sous la forme d’une commande SQL que vous testerez sur votre base de données.

1. Quel est le nom et le prénom des acteurs et le nombre de films dans lesquels ils ont
joué ?
2. Quel est le nom et le prénom des acteurs et le nombre de films dans lesquels ils ont
joué pour les acteurs ayant joué dans strictement plus d’un film?
3. Quel est le nom et le prénom des acteurs et le nombre de drames dans lesquels ils ont
joué ?
4. Quel est le nombre moyen de projections de l’ensemble des cinémas ?
5. Quels sont les cinémas qui ont projeté tous les films ?
6. Quels sont les acteurs qui ont joué dans un nombre de films supérieur à la moyenne des
acteurs ?
7. On veut obtenir le nom et le prénom de tous les individus classés du meilleur acteur au
plus mauvais en nombre de films.
8. Quel est le nombre de films réalisés par les réalisateurs, dont on désire connaître le nom
et le prénom, ayant réalisé au moins un film du même genre que l'un des films réalisés
par David Cronenberg ?

Corrigé

1. Quel est le nom et le prénom des acteurs et le nombre de films dans lesquels ils ont joué ?

select nom, prenom, count(num_film)


from individu i, jouer j
where i.num_ind = j.num_ind
group by nom,prenom;

2. Quel est le nom et le prénom des acteurs et le nombre de films dans lesquels ils ont joué pour les
acteurs ayant joué dans strictement plus d’un film?

select nom, prenom, count(num_film)


from individu i, jouer j
where i.num_ind = j.num_ind
group by nom,prenom
having count(num_film) > 1;
3. Quel est le nom et le prénom des acteurs et le nombre de drames dans lesquels ils ont joué ?

select nom, prenom, count(j.num_film)


from individu i, jouer j, film f
where i.num_ind = j.num_ind
and j.num_film = f.num_film
and genre = 'Drame'
group by nom,prenom;

4. Quel est le nombre moyen de projections de l’ensemble des cinémas ?


select n1/n2
from (select count(*) as n1 from projection), (select count(*) as n2 from cinema) ;

5. Quels sont les cinémas qui ont projeté tous les films ?

Reformulation : Donner les cinémas donc le nombre de films projetés (différents) est
égal au nombre total des films.

Attention : s'il n'y a pas distinct dans count, le résultat est faux

select [Link]
from cinema c, projection p
where c.num_cine = p.num_cine
group by [Link]
having count(distinct p.num_film) = (select count(*) from film);

6. Quels sont les acteurs qui ont joué dans un nombre de films supérieur à la moyenne des
acteurs ?

select [Link], [Link], COUNT(distinct j.num_film)


from individu a, jouer j
where a.num_ind = j.num_ind
group by [Link], [Link]
having COUNT(distinct j.num_film) >
(select AVG(COUNT(distinct j.num_film))
from individu a, jouer j
where a.num_ind = j.num_ind
group by a.num_ind );

7. On veut obtenir le nom et le prénom de tous les individus classés du meilleur acteur au
plus mauvais en nombre de films.

select [Link], [Link], COUNT(j.num_film)


from individu i left join jouer j on i.num_ind = j.num_ind
group by [Link], [Link]
order by COUNT(distinct j.num_film) DESC;
8. Quel est le nombre de films réalisés par les réalisateurs, dont on désire connaître le nom
et le prénom, ayant réalisé au moins un film du même genre que l'un des films réalisés
par David Cronenberg ?

select nom, prenom, count(num_film)


from film f, individu i
where f.num_ind = i.num_ind
and genre IN (select genre
from film f, individu i
where f.num_ind = i.num_ind
and nom = 'Cronenberg'
and prenom = 'David')
group by i.num_ind, nom, prenom;

Vous aimerez peut-être aussi