2 prise en main de la base de données «...
TRANSCRIPT
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 1 | 15
Requêtes sur une base de données à plusieurs tables - Jointures
2 Prise en main de la base de données « Cinema »
1) Afficher le nombre de lignes de la table casting.
SELECT COUNT(*) FROM casting
COUNT(*)
15715
2) Afficher le numéro et le titre des films sortis en 2000. Les compter en écrivant une autre requête.
SELECT id,titre FROM film WHERE annee=2000
id titre
32 Gladiator
92 X-Men
99 Mission: Impossible II
173 Patriot, The
188 Perfect Storm, The
234 High Fidelity
235 Chicken Run
250 Erin Brockovich
278 Unbreakable
305 Mission to Mars
317 Scream 3
322 Gone in Sixty Seconds
329 Scary Movie
3) En quelle année le film "Forrest Gump" est-il sorti ?
SELECT annee FROM film WHERE titre="Forrest Gump"
annee
1994
4) Lister tous les films dont le titre contient "Star Wars". On utilisera le test LIKE.
Les trier par année de sortie.
SELECT annee,titre FROM film WHERE titre LIKE "%Star Wars%" ORDER BY annee
annee titre
1977 Star Wars Episode IV: A New Hope
1980 Star Wars: Episode V - The Empire Strikes Back
1983 Star Wars: Episode VI - Return of the Jedi
1999 Star Wars: Episode I - The Phantom Menace
2002 Star Wars Episode II: Attack of the Clones
2005 Star Wars Episode III: Revenge of the Sith
5) Afficher les titres des films dont l’identifiant est 7, 37 ou 133 (en une unique requête bien entendu).
SELECT titre FROM film WHERE id IN (7,37,133)
titre
Schindler's List
Indiana Jones and the Last Crusade
Close Encounters of the Third Kind
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+id%2Ctitre+FROM+film+WHERE+annee%3D2000%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+id%2Ctitre+FROM+film+WHERE+annee%3D2000%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fstring-comparison-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_likehttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+annee%2Ctitre+FROM+film+WHERE+titre+LIKE+%22%25Star+Wars%25%22%0AORDER+BY+%60film%60.%60annee%60++DESC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+annee%2Ctitre+FROM+film+WHERE+titre+LIKE+%22%25Star+Wars%25%22%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcomparison-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_inhttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre+FROM+film+WHERE+id+IN+%287%2C37%2C133%29%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+annee,titre+FROM+film+WHERE+titre+LIKE+"%Star+Wars%"ORDER+BY+`film`.`annee`++DESC&session_max_rows=25&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 2 | 15
6) Quel est le réalisateur des trois films précédents? Même si la réponse est évidente, vous devez écrire
une requête (en copiant-collant l’identifiant du réalisateur, puis en utilisant une sous-requête).
En deux requêtes, en copiant collant l’identifiant du réalisateur :
SELECT titre,realisateur FROM film WHERE id IN (7,37,133)
titre realisateur
Schindler's List 18
Indiana Jones and the Last Crusade 18
Close Encounters of the Third Kind 18
SELECT nom FROM acteur WHERE id=18
nom
Steven Spielberg
En une requête englobant une sous-requête :
SELECT nom FROM acteur WHERE id=(SELECT DISTINCT realisateur FROM film WHERE
id IN (7,37,133))
nom
Steven Spielberg
Bien noter le résultat de la sous-requête que l’on a adaptée pour qu’elle renvoie uniquement l’id voulu :
SELECT DISTINCT realisateur FROM film WHERE id IN (7,37,133)
realisateur
18
7) Quel est l’identifiant de l’acteur Brad Pitt?
SELECT id FROM acteur WHERE nom="Brad Pitt"
id
258
3 Jointures
La jointure permet de regrouper des informations stockées dans plusieurs tables. L’utilisation la plus
simple correspond à la syntaxe suivante.
SELECT * FROM table1
JOIN table2 ON table1.champ1 = table2.champ2
Le résultat est le même que celui qu’on obtiendrait en réalisant le produit cartésien des deux tables suivi
d’un filtrage ne gardant que les multiplets respectant la condition table1.champ1 = table2.champ2.
Taper la requête suivante :
SELECT nom
FROM acteur
JOIN film ON film.realisateur=acteur.id
WHERE film.id = 7
Vérifier qu’on retrouve un résultat obtenu précédemment. Expliquer.
SELECT nom FROM acteur JOIN film ON film.realisateur=acteur.id WHERE
film.id = 7
nom
Steven Spielberg
La syntaxe table.id est ici nécessaire car les tables acteur et film ont toutes les deux un champ id. En
revanche, film.realisateur peut être abrégé par realisateur car il n’y a pas d’ambiguïté.
8) Le but de cette question est de retrouver les films réalisés par Quentin Tarantino. On va utiliser deux
méthodes.
La mauvaise méthode :
- Ecrire une première requête pour obtenir l’identifiant de Quentin Tarantino
- Ecrire une deuxième requête pour obtenir les films qu’il a réalisé en copiant le résultat de la requête
précédente.
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcomparison-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_inhttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%2Crealisateur+FROM+film+WHERE+id+IN+%287%2C37%2C133%29%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%2Crealisateur+FROM+film+WHERE+id+IN+%287%2C37%2C133%29%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+18&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+18&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+18&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcomparison-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_inhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fcomparison-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_inhttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+18&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 3 | 15
SELECT id FROM acteur WHERE nom="Quentin Tarantino"
id
444
SELECT titre FROM film WHERE realisateur=444
titre
Pulp Fiction
Reservoir Dogs
Jackie Brown
Kill Bill: Vol. 1
Kill Bill: Vol. 2
Death Proof
Inglourious Basterds
Django Unchained
La bonne méthode :
- Ecrire une unique requête utilisant une jointure.
La jointure à réaliser est mise en évidence ci-dessous :
SELECT * FROM film JOIN acteur ON realisateur=acteur.id
id titre annee note nb_votes realisateur id nom
1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 360 George Lucas
2 Shawshank Redemption, The 1994 9.00 44974 1040 1040 Frank Darabont
3 Pulp Fiction 1994 8.60 43993 444 444 Quentin Tarantino
4 Titanic 1997 7.20 43371 198 198 James Cameron
5 Star Wars: Episode V - The Empire Strikes Back 1980 8.60 39446 651 651 Irvin Kershner
6 Usual Suspects, The 1995 8.70 35027 639 639 Bryan Singer
…
La requête sur cette jointure donnant le résultat est :
SELECT titre FROM film JOIN acteur ON realisateur=acteur.id WHERE
nom="Quentin Tarantino"
titre
Pulp Fiction
Reservoir Dogs
Jackie Brown
Kill Bill: Vol. 1
Kill Bill: Vol. 2
Death Proof
Inglourious Basterds
Django Unchained
9) Quel est l’identifiant du film Casablanca ? SELECT id FROM film WHERE titre="Casablanca"
id
27
10) Afficher le casting (c’est-à-dire la liste des acteurs) du film Casablanca en copiant-collant l’identifiant obtenu à la question précédente, puis à l’aide d’une sous-requête.
Première façon : La jointure sur laquelle construire la requête est
SELECT * FROM casting JOIN acteur ON id_acteur=acteur.id
id_film id_acteur num id nom
367 1876 12 1876 'Weird Al' Yankovic
728 1876 1 1876 'Weird Al' Yankovic
698 4235 2 4235 A.J. Langer
…
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%0AFROM+film%0AWHERE+realisateur%3D444%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+360&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+1040&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+444&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+198&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+651&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+639&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%0AFROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AWHERE+nom%3D%22Quentin+Tarantino%22%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A%0AFROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A%0AFROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A%0AFROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A%0AFROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A%0AFROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 4 | 15
La requête sur cette jointure est :
SELECT nom FROM casting JOIN acteur ON id_acteur=acteur.id WHERE id_film=27
nom
Humphrey Bogart
Ingrid Bergman
Claude Rains
Peter Lorre
Paul Henreid
John Qualen
Curt Bois
Conrad Veidt
Madeleine LeBeau
Deuxième méthode à l’aide d’une sous-requête :
SELECT nom FROM casting JOIN acteur ON id_acteur=acteur.id WHERE
id_film=(SELECT id FROM film WHERE titre="Casablanca")
11) Obtenir le casting du film Alien en utilisant une unique requête (c’est-à-dire sans utiliser de copier-
coller comme à la question précédente).
On pourra réaliser plusieurs jointures (c’est-à-dire utiliser plusieurs fois la commande JOIN ... ON).
La première jointure ci-dessous associe les id_film de la table casting à leurs noms via le prédicat
id_film=film.id :
SELECT * FROM casting JOIN film ON id_film=film.id
id_film id_acteur num id titre annee note nb_votes realisateur
1 6 2 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360
1 462 3 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360
1 552 1 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360
…
On réalise ensuite une seconde jointure à partir de la jointure ci-dessus, pour associer aux id_acteurs de
la table casting avec le nom des acteurs correspondants à l’aide du prédicat id_acteur=acteur.id :
id_film id_acteur num id titre annee note nb_votes realisateur id nom
1 6 2 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 6 Harrison Ford
1 462 3 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 462 Carrie Fisher
1 552 1 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 552 Mark Hamill
…
La requête à formuler sur cette double jointure est alors :
SELECT nom FROM casting JOIN film ON id_film=film.id JOIN acteur ON
id_acteur=acteur.id WHERE titre="Alien"
nom
Sigourney Weaver
Ian Holm
Harry Dean Stanton
Tom Skerritt
John Hurt
Veronica Cartwright
Yaphet Kotto
12) Lister les films dans lesquels a joué Harrison Ford.
On formule une requête sur la même double jointure que précédemment :
SELECT titre FROM casting JOIN film ON id_film=film.id JOIN acteur ON
id_acteur=acteur.id WHERE nom="Harrison Ford"
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+nom%0AFROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+id_film%3D27%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+nom+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+titre%3D%22Alien%22%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 5 | 15
titre
Star Wars Episode IV: A New Hope
Star Wars: Episode V - The Empire Strikes Back
Raiders of the Lost Ark
Star Wars: Episode VI - Return of the Jedi
Blade Runner
Indiana Jones and the Last Crusade
Fugitive, The
Apocalypse Now
Indiana Jones and the Temple of Doom
Air Force One
Witness
Clear and Present Danger
Patriot Games
American Graffiti
What Lies Beneath
Six Days Seven Nights
Working Girl
Sabrina
Devil's Own, The
Conversation, The
Regarding Henry
Frantic
Presumed Innocent
Random Hearts
Mosquito Coast, The
13) Lister les films dans lesquels Harrison Ford a joué un second rôle (les premiers rôles correspondent
à num=1).
En utilisant toujours la même double jointure :
SELECT titre FROM casting JOIN film ON id_film=film.id JOIN acteur ON
id_acteur=acteur.id WHERE nom="Harrison Ford" AND num>1
titre
Star Wars Episode IV: A New Hope
Star Wars: Episode V - The Empire Strikes Back
Star Wars: Episode VI - Return of the Jedi
Apocalypse Now
American Graffiti
Conversation, The
14) Lister tous les films de la base de données sortis en 2000 en précisant le nom de l’acteur jouant le
rôle principal.
On modifie les attributs de projection et le prédicat de sélection :
SELECT titre,nom FROM casting JOIN film ON id_film=film.id JOIN acteur ON
id_acteur=acteur.id WHERE annee=2000 AND num=1
titre nom
Gladiator Russell Crowe
X-Men Hugh Jackman
Mission: Impossible II Tom Cruise
Patriot, The Mel Gibson
http://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+titre+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+nom%3D%22Harrison+Ford%22%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_andhttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+titre+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+nom%3D%22Harrison+Ford%22+AND+num%3E1%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_andhttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+titre%2Cnom+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+annee%3D2000+AND+num%3D1%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+titre%2Cnom+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+annee%3D2000+AND+num%3D1%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 6 | 15
titre nom
Perfect Storm, The George Clooney
High Fidelity John Cusack
Chicken Run Phil Daniels (I)
Erin Brockovich Julia Roberts
Unbreakable Bruce Willis
Mission to Mars Gary Sinise
Scream 3 David Arquette
Gone in Sixty Seconds Nicolas Cage
Scary Movie Shannon Elizabeth
Wo hu zang long Yun-Fat Chow
U-571 Matthew McConaughey
Whole Nine Yards, The Bruce Willis
American Psycho Christian Bale
Charlie's Angels Cameron Diaz
Pitch Black Radha Mitchell
Final Destination Devon Sawa
What Lies Beneath Harrison Ford
Cell, The Jennifer Lopez
Frequency Dennis Quaid
Beach, The Leonardo DiCaprio
Almost Famous Billy Crudup
15) Afficher tous les Star Wars en précisant le nom du réalisateur.
On peut revenir ici à une jointure simple permettant d’associer à l’attribut entier réalisateur de la table
film, le nom du réalisateur, tiré de la table acteur :
SELECT * FROM film JOIN acteur ON realisateur=acteur.id
id titre annee note nb_votes realisateur id nom
1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 360 George Lucas
2 Shawshank Redemption, The 1994 9.00 44974 1040 1040 Frank Darabont
3 Pulp Fiction 1994 8.60 43993 444 444 Quentin Tarantino
4 Titanic 1997 7.20 43371 198 198 James Cameron
5 Star Wars: Episode V - The Empire Strikes Back 1980 8.60 39446 651 651 Irvin Kershner
…
La requête à faire sur cette jointure est alors :
SELECT titre,nom FROM film JOIN acteur ON realisateur=acteur.id WHERE titre
LIKE "%Star Wars%"
titre nom
Star Wars Episode IV: A New Hope George Lucas
Star Wars: Episode V - The Empire Strikes Back Irvin Kershner
Star Wars: Episode VI - Return of the Jedi Richard Marquand
Star Wars: Episode I - The Phantom Menace George Lucas
Star Wars Episode II: Attack of the Clones George Lucas
Star Wars Episode III: Revenge of the Sith George Lucas
16) Sur le tournage de quel ”film” Angelina Jolie et Brad Pitt se sont-ils rencontrés? On va procéder
pas à pas. Commencer par obtenir l’identifiant d’Angelina Jolie puis celui de Brad Pitt. En déduire le
titre du ”film” (en copiant-collant les identifiants des deux acteurs).
On forme des requêtes sur la table acteur donnant les id des deux acteurs :
http://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+titre%2Cnom+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+annee%3D2000+AND+num%3D1%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+titre%2Cnom+FROM+casting+JOIN+film+ON+id_film%3Dfilm.id+%0AJOIN+acteur+ON+id_acteur%3Dacteur.id%0AWHERE+annee%3D2000+AND+num%3D1%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+360&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+1040&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+444&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+198&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+651&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fstring-comparison-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_likehttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%2Cnom+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AWHERE+titre+LIKE+%22%25Star+Wars%25%22%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%2Cnom+FROM+film+JOIN+acteur+ON+realisateur%3Dacteur.id%0AWHERE+titre+LIKE+%22%25Star+Wars%25%22%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 7 | 15
SELECT id FROM acteur WHERE nom="Angelina Jolie"
id
487
SELECT id FROM acteur WHERE nom="Brad Pitt"
id
258
Puis une requête sur la table casting pour identifier un film dans lequel les deux acteurs ont joué ;
concrètement, on liste les films dans lesquels l’un ou l’autre a joué et on repère sur le résultat un id_film
apparaissant deux fois :
id_film
21
33
144
201
253
638
647
662
962
1307
1856
322
354
494
523
866
1045
1806
1856
Le résultat n’étant pas très facile à lire (18 résultats non ordonnés à examiner), on peut ordonner les
résultats selon l’id_film, pour repérer un id_film apparaissant deux fois :
SELECT id_film FROM casting WHERE id_acteur=487 OR id_acteur=258 ORDER BY
id_film
Il est possible aussi de regrouper les résultats selon l’id_film, à condition de bien demander l’affichage
du nombre d’enregistrements pour chaque regroupement :
SELECT id_film,COUNT(*) FROM casting WHERE id_acteur=487 OR id_acteur=258
GROUP BY id_film
ou même encore ordonner par le nombre d’enregistrements :
SELECT id_film,COUNT(*) FROM casting WHERE id_acteur=487 OR id_acteur=258
GROUP BY id_film ORDER BY COUNT(*) DESC
Ou bien, avec renommage :
SELECT id_film,COUNT(*) AS nbOccurrences FROM casting WHERE id_acteur=487
OR id_acteur=258 GROUP BY id_film ORDER BY nbOccurrences DESC
id_film nbOccurrences
1856 2
866 1
21 1
...
Bien sûr, si l’on recourt à une clause HAVING pour ne sélectionner que les id_film apparaissant deux
fois, on obtient exactement et seulement le résultat cherché :
SELECT id_film,COUNT(*) AS nbOccurrences FROM casting WHERE id_acteur=487
OR id_acteur=258 GROUP BY id_film HAVING COUNT(*)=2
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+id_film+FROM+casting+WHERE+id_acteur%3D487+OR+id_acteur%3D258%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_orhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_orhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_orhttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+id_film%2CCOUNT%28%2A%29+AS+nbOccurrences+FROM+casting+WHERE+id_acteur%3D487+OR+id_acteur%3D258+GROUP+BY+id_film%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+id_film%2CCOUNT%28%2A%29+AS+nbOccurrences+FROM+casting+WHERE+id_acteur%3D487+OR+id_acteur%3D258+GROUP+BY+id_film%0AORDER+BY+%60nbOccurrences%60++ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_orhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+id_film,COUNT(*)+AS+nbOccurrences+FROM+casting+WHERE+id_acteur%3D487+OR+id_acteur%3D258+GROUP+BY+id_filmORDER+BY+`nbOccurrences`++ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 8 | 15
id_film nbOccurrences
1856 2
Ou plus simplement (pour n’obtenir pour seul résultat que l’id_film cherché) :
SELECT id_film FROM casting WHERE id_acteur=487 OR id_acteur=258 GROUP BY
id_film HAVING COUNT(*)=2
id_film
1856
Il reste encore à formuler une requête pour obtenir le titre du film en question (en recopiant l’id_film
obtenu :
SELECT titre FROM film WHERE film.id=1856
titre
Mr. & Mrs. Smith
Bien sûr, on peut à l’aide de sous-requête, fondre toutes les requêtes en une seule et éviter ainsi toute
recopie, mais au prix d’une requête assez difficile à décrypter au premier abord :
SELECT titre FROM film WHERE film.id=(SELECT id_film FROM casting WHERE
id_acteur=(SELECT id FROM acteur WHERE nom="Angelina Jolie") OR
id_acteur=(SELECT id FROM acteur WHERE nom="Brad Pitt") GROUP BY id_film
HAVING COUNT(*)=2)
titre
Mr. & Mrs. Smith
Pour obtenir une requête plus simple, il est ici, et peut être, de façon générale, intéressant de réaliser une
jointure entre une table et elle-même. Cela permet par exemple de retrouver les acteurs ayant joué dans
un même film. Il est alors nécessaire de renommer les deux copies de la table pour éviter toute confusion.
17) Retrouver le résultat de la question précédente en utilisant une unique requête. Pour cela, réaliser
une auto-jointure de la table casting.
On réalise l’auto-jointure de la table casting avec elle-même de la façon suivante (ou le renommage de
la table casting est nécessaire pour que la requête de jointure soit acceptée), suivant le prédicat d’égalité
de l’attribut id_film dans les « deux » tables casting :
SELECT * FROM casting AS table1 JOIN casting AS table2 ON
table1.id_film=table2.id_film
id_film id_acteur num id_film id_acteur num
1 552 1 1 6 2
1 552 1 1 462 3
1 552 1 1 552 1
1 552 1 1 925 5
1 552 1 1 1655 6
…
Une autre façon de procéder, en ne renommant qu’une table étant :
SELECT * FROM casting JOIN casting AS casting1 ON
casting.id_film=casting1.id_film
Pour un résultat plus concis, on peut compléter par une projection et, pour plus de clarté, par quelques
renommages :
SELECT table1.id_film,table1.id_acteur AS acteur1,table2.id_acteur AS
acteur2 FROM casting AS table1 JOIN casting AS table2 ON
table1.id_film=table2.id_film
id_film acteur1 acteur2
1 6 6
1 6 462
1 6 552
…
Il est alors facile de compléter la requête par une clause de sélection adéquate :
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_orhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_orhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table1%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table1%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table1%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table2%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table2%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table2%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+table1.id_film%2Ctable1.id_acteur+AS+acteur1%2Ctable2.id_acteur+AS+acteur2+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table1%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+table1.id_film%2Ctable1.id_acteur+AS+acteur1%2Ctable2.id_acteur+AS+acteur2+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table1%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+table1.id_film%2Ctable1.id_acteur+AS+acteur1%2Ctable2.id_acteur+AS+acteur2+FROM+casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%0AORDER+BY+%60table2%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 9 | 15
SELECT table1.id_film,table1.id_acteur AS `acteur1`,table2.id_acteur AS
`acteur2` FROM casting AS table1 JOIN casting AS table2 ON
table1.id_film=table2.id_film WHERE table1.id_acteur=487 AND
table2.id_acteur=258
Si on veut ne pas avoir à trouver et copier les id des deux acteurs, on fera après l’auto-jointure, deux
jointures sur la table acteur, et pour pouvoir afficher le titre du film, une jointure supplémentaire avec la
table film :
SELECT * FROM (((casting AS table1 JOIN casting AS table2 ON
table1.id_film=table2.id_film) JOIN acteur AS acteur1 ON
table1.id_acteur=acteur1.id) JOIN acteur AS acteur2 ON
table2.id_acteur=acteur2.id) JOIN film ON table1.id_film=film.id
id_film id_acteur num id_film id_acteur num id nom id nom id titre annee note nb_votes realisateur
1 6 2 1 6 2 6 Harrison Ford
6 Harrison
Ford 1
Star Wars Episode IV: A New Hope
1977 8.80 53567 360
1 6 2 1 462 3 6 Harrison
Ford 462
Carrie Fisher
1 Star Wars Episode IV:
A New Hope 1977 8.80 53567 360
1 6 2 1 552 1 6 Harrison
Ford 552
Mark Hamill
1 Star Wars Episode IV:
A New Hope 1977 8.80 53567 360
… [146723 résultats]
Et si l’on ne garde que les attributs d’intérêt pour la requête :
SELECT film.titre,acteur1.nom AS acteur1,acteur2.nom AS acteur2 FROM
(((casting AS table1 JOIN casting AS table2 ON
table1.id_film=table2.id_film) JOIN acteur AS acteur1 ON
table1.id_acteur=acteur1.id) JOIN acteur AS acteur2 ON
table2.id_acteur=acteur2.id) JOIN film ON table1.id_film=film.id
titre acteur1 acteur2
'Breaker' Morant Bryan Brown Bryan Brown
'Breaker' Morant Bryan Brown Edward Woodward
'Breaker' Morant Bryan Brown Jack Thompson (I)
… [146723 résultats]
On termine alors en imposant que l’acteur1 soit Angelina Jolie et l’acteur2 soit Brad Pitt :
SELECT film.titre,acteur1.nom AS acteur1,acteur2.nom AS acteur2 FROM
(((casting AS table1 JOIN casting AS table2 ON
table1.id_film=table2.id_film) JOIN acteur AS acteur1 ON
table1.id_acteur=acteur1.id) JOIN acteur AS acteur2 ON
table2.id_acteur=acteur2.id) JOIN film ON table1.id_film=film.id WHERE
acteur1.nom="Angelina Jolie" AND acteur2.nom="Brad Pitt"
titre acteur1 acteur2
Mr. & Mrs. Smith Angelina Jolie Brad Pitt
18) Afficher les réalisateurs qui ont joué dans leur propre film. Commencer par afficher leur identifiant
(avec une unique jointure). Puis afficher leur nom (avec deux jointures)
Il y a besoin ici de croiser les informations des tables film et casting, par la jointure suivante
SELECT * FROM film JOIN casting ON film.id=id_film
id titre annee note nb_votes realisateur id_film id_acteur num
1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 1 6 2
1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 1 462 3
1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 1 552 1
…
qui permet d’avoir un enregistrement par multiplet (film,réalisateur,acteur), dans lequel on accède en
particulier au réalisateur du film et à un acteur du film.
On peut alors compléter par l’opération de sélection adéquate :
id_film acteur1 acteur2
1856 487 258
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_andhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60table1%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60table1%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60table1%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60table2%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60table2%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60table2%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60acteur1%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60acteur1%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60acteur2%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60acteur2%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+film.titre%2Cacteur1.nom+AS+acteur1%2Cacteur2.nom+AS+acteur2+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+film.titre%2Cacteur1.nom+AS+acteur1%2Cacteur2.nom+AS+acteur2+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60acteur1%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+film.titre%2Cacteur1.nom+AS+acteur1%2Cacteur2.nom+AS+acteur2+FROM+%28%28%28casting+AS+table1+JOIN+casting+AS+table2+ON+table1.id_film%3Dtable2.id_film%29+JOIN+acteur+AS+acteur1+ON+table1.id_acteur%3Dacteur1.id%29+JOIN+acteur+AS+acteur2+ON+table2.id_acteur%3Dacteur2.id%29+JOIN+film+ON+table1.id_film%3Dfilm.id%0AORDER+BY+%60acteur2%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Flogical-operators.html&server=0&token=752fb39708f92510b12871d89608c5ac#operator_andhttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+360&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+360&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+360&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 10 | 15
SELECT * FROM film JOIN casting ON film.id=id_film WHERE
realisateur=id_acteur
id titre annee note nb_votes realisateur id_film id_acteur num
39 Reservoir Dogs 1992 8.20 20343 444 39 444 10
40 Citizen Kane 1941 8.80 20269 253 40 253 1
49 Monty Python and the Holy Grail 1975 8.30 18640 59 49 59 4
…
Pour obtenir le nom des réalisateurs en question, on peut compléter par la première jointure par une avec
la table acteur sur le prédicat id_acteur=acteur.id, en gardant en fin de requête, le même critère de
sélection :
SELECT * FROM (film JOIN casting ON film.id=id_film) JOIN acteur ON
id_acteur=acteur.id WHERE realisateur=id_acteur
id titre annee note nb_votes realisateur id_film id_acteur num id nom
39 Reservoir Dogs 1992 8.20 20343 444 39 444 10 444 Quentin Tarantino
40 Citizen Kane 1941 8.80 20269 253 40 253 1 253 Orson Welles
49 Monty Python and the Holy Grail 1975 8.30 18640 59 49 59 4 59 Terry Gilliam
68 Star Trek: First Contact 1996 7.20 13948 500 68 500 2 500 Jonathan Frakes
…
On obtient tous les films (134 au total) dans lesquels le réalisateur a joué un rôle figurant au casting.
On peut alléger le résultat par projection et renommage :
SELECT titre,nom AS 'réalisateur et acteur' FROM (film JOIN casting ON
film.id=id_film) JOIN acteur ON id_acteur=acteur.id WHERE
realisateur=id_acteur
titre réalisateur et acteur
Reservoir Dogs Quentin Tarantino
Citizen Kane Orson Welles
Monty Python and the Holy Grail Terry Gilliam
…
19) Afficher l’année et le nombre de films avec Bruce Willis sortis cette année-là.
On doit réaliser une jointure des trois tables (casting pour avoir le lien acteur-film, film pour avoir
l’année du film, acteur pour ne pas avoir à chercher l’id de Bruce Willis).
SELECT annee,COUNT(*) FROM casting JOIN acteur ON id_acteur=acteur.id WHERE
nom="Bruce Willis" GROUP BY annee
annee COUNT(*)
1987 1
1988 1
1990 2
1991 2
1992 1
1993 1
1994 3
1995 2
1997 1
1998 2
1999 2
2000 2
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+film+JOIN+casting+ON+film.id%3Did_film%0AWHERE+realisateur%3Did_acteur%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+444&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+253&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+59&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60note%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60nb_votes%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60realisateur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60acteur%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+%2A+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+444&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+253&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+59&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=acteur&pos=0&sql_query=SELECT+%2A+FROM+%60cinema%60.%60acteur%60+WHERE+%60id%60+%3D+500&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%2Cnom+AS+%27r%C3%A9alisateur+et+acteur%27+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60film%60.%60titre%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=film&sql_query=SELECT+titre%2Cnom+AS+%27r%C3%A9alisateur+et+acteur%27+FROM+%28film+JOIN+casting+ON+film.id%3Did_film%29%0AJOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+realisateur%3Did_acteur%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+annee%2CCOUNT%28%2A%29+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+JOIN+film+ON+id_film%3Dfilm.id+WHERE+nom%3D%22Bruce+Willis%22+GROUP+BY+annee%0AORDER+BY+%60film%60.%60annee%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+annee%2CCOUNT%28%2A%29+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+JOIN+film+ON+id_film%3Dfilm.id+WHERE+nom%3D%22Bruce+Willis%22+GROUP+BY+annee%0AORDER+BY+COUNT%28%2A%29+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5ac
-
Lycée Claude Bernard 2014-2015 Informatique - T.P. n◦ 15 - Corrigé
P a g e 11 | 15
20) Lister dans l’ordre alphabétique les acteurs ayant eu au moins 10 rôles principaux.
On n’a besoin cette fois que de la table casting (pour accéder au rang de l’acteur dans le casting, et de
la table acteur pour pouvoir afficher le nom des acteurs) que l’on joint de la façon suivante :
SELECT * FROM casting JOIN acteur ON id_acteur=acteur.id
id_film id_acteur num id nom
367 1876 12 1876 'Weird Al' Yankovic
728 1876 1 1876 'Weird Al' Yankovic
698 4235 2 4235 A.J. Langer
…
On doit alors ne garder que les enregistrements relatifs aux rôles principaux :
SELECT * FROM casting JOIN acteur ON id_acteur=acteur.id WHERE num=1
id_film id_acteur num id nom
1 552 1 552 Mark Hamill
2 25 1 25 Tim Robbins
3 34 1 34 John Travolta
…
Puis compter, par acteur, le nombre de ces enregistrements :
SELECT nom,COUNT(*) FROM casting JOIN acteur ON id_acteur=acteur.id WHERE
num=1 GROUP BY acteur.id
nom COUNT(*)
Woody Allen 14
Clint Eastwood 18
Robert De Niro 18
Sean Connery 19
…
On sélectionne alors suivant la valeur de la fonction d’agrégation (On doit utiliser donc une clasue
HAVING), puis on ordonne par ordre alphabétique sur le nom :
SELECT nom,COUNT(*) FROM casting JOIN acteur ON id_acteur=acteur.id WHERE
num=1 GROUP BY acteur.id HAVING COUNT(*)>=10 ORDER BY nom
nom COUNT(*)
Al Pacino 15
Arnold Schwarzenegger 16
Bruce Willis 12
Clint Eastwood 18
… [25 résultats]
21) Lister les acteurs ayant joué sous la direction d’Alfred Hitchcock. Dans un premier temps, on pourra
chercher l’identifiant d’Alfred Hitchcock, puis afficher les films qu’il a réalisés. Dans un deuxième
temps, obtenir le même résultat avec une unique requête.
En une seule requête, on peut tout d’abord à l’aide de trois jointures successives, obtenir la table
suivante, dans laquelle, pour chaque enregistrement de la table casting, on dispose du réalisateur du film
(par la jointure casting-film sur le prédicat id_film=film.id), du nom de l’acteur (par la jointure de la
table précédente avec la table acteur sur le prédicat id_acteur=acteur.id) et du nom du réalisateur (par la
jointure de la table précédente avec de nouveau la table acteur - pour laquelle on doit prendre un alias,
acteur2, du fait de sa double utilisation, sur le prédicat realisateur=acteur2.id):
SELECT * FROM ((casting JOIN film ON id_film=film.id) JOIN acteur ON
id_acteur=acteur.id) JOIN acteur AS acteur2 ON realisateur=acteur2.id
id_film id_acteur num id titre annee note nb_votes realisateur id nom id nom
1 6 2 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 6 Harrison Ford 360 George Lucas
1 462 3 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 462 Carrie Fisher 360 George Lucas
1 552 1 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 552 Mark Hamill 360 George Lucas
1 925 5 1 Star Wars Episode IV: A New Hope 1977 8.80 53567 360 925 Alec Guinness 360 George Lucas
http://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1%0AORDER+BY+%60casting%60.%60num%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1%0AORDER+BY+%60acteur%60.%60id%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+nom%2CCOUNT%28%2A%29+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1+GROUP+BY+acteur.id%0AORDER+BY+%60acteur%60.%60nom%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+nom%2CCOUNT%28%2A%29+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1+GROUP+BY+acteur.id%0AORDER+BY+COUNT%28%2A%29+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fgroup-by-functions.html&server=0&token=752fb39708f92510b12871d89608c5ac#function_counthttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+nom%2CCOUNT%28%2A%29+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1+GROUP+BY+acteur.id+HAVING+COUNT%28%2A%29%3E%3D10%0AORDER+BY+%60acteur%60.%60nom%60++DESC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+nom%2CCOUNT%28%2A%29+FROM+casting+JOIN+acteur+ON+id_acteur%3Dacteur.id+WHERE+num%3D1+GROUP+BY+acteur.id+HAVING+COUNT%28%2A%29%3E%3D10%0AORDER+BY+COUNT%28%2A%29+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&server=0&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28casting+JOIN+film+ON+id_film%3Dfilm.id%29+JOIN+acteur+ON+id_acteur%3Dacteur.id%29+JOIN+acteur+AS+acteur2+ON+realisateur%3Dacteur2.id%0AORDER+BY+%60casting%60.%60id_film%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28casting+JOIN+film+ON+id_film%3Dfilm.id%29+JOIN+acteur+ON+id_acteur%3Dacteur.id%29+JOIN+acteur+AS+acteur2+ON+realisateur%3Dacteur2.id%0AORDER+BY+%60casting%60.%60id_acteur%60+ASC&session_max_rows=25&token=752fb39708f92510b12871d89608c5achttp://localhost/phpmyadmin/sql.php?db=cinema&table=casting&sql_query=SELECT+%2A+FROM+%28%28casting+JOIN+film+ON+id_film%3Dfilm.id%29+JOIN+acteur+ON+id_acteur%3Dacteur.id%29+J