nsi:terminales:sql_requests
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:terminales:sql_requests [2021/08/19 15:19] – goupillwiki | nsi:terminales:sql_requests [2022/08/29 21:45] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 15: | Ligne 15: | ||
| Afin d' | Afin d' | ||
| - | {{ :nsi: | + | {{ nsi: |
| Pour cette base, nous besoin de deux tables FILM et ARTISTE et aussi d'une table JOUEDANS pour la relation du haut : | Pour cette base, nous besoin de deux tables FILM et ARTISTE et aussi d'une table JOUEDANS pour la relation du haut : | ||
| Ligne 104: | Ligne 104: | ||
| Dans le texte de la biographie, vous pouvez voir la présence de caractères '' | Dans le texte de la biographie, vous pouvez voir la présence de caractères '' | ||
| - | ==== On ne précise pas la clé primaire ==== | + | <WRAP tip> |
| + | ==== Préciser ou non la clé primaire | ||
| - | '' | + | On a le choix : on peut décider de préciser un '' |
| + | |||
| + | <code sql> | ||
| + | INSERT INTO ARTISTE(idArtiste, | ||
| + | </ | ||
| + | |||
| + | et on précise l' | ||
| + | |||
| + | Puisque dans la requête précédente figurent toutes les colonnes de la table, on peut se contenter de : | ||
| + | |||
| + | <code sql> | ||
| + | INSERT INTO ARTISTE VALUES(129, 'Jo', ' | ||
| + | </ | ||
| + | |||
| + | Dans les sujets | ||
| + | </ | ||
| ==== Erreur si insertion de film sans idReal ==== | ==== Erreur si insertion de film sans idReal ==== | ||
| Ligne 210: | Ligne 226: | ||
| <WRAP box>Une base est construite par des milliers d' | <WRAP box>Une base est construite par des milliers d' | ||
| - | Vous disposez du fichier {{ :nsi: | + | Vous disposez du fichier {{ nsi: |
| + | </WRAP> | ||
| ==== Sélection ==== | ==== Sélection ==== | ||
| Ligne 259: | Ligne 276: | ||
| === tri === | === tri === | ||
| - | Et on peut trier -- tri par naissance puis nom dans le premier cas, ordre descendant dans le second cas. | + | Et on peut trier : |
| + | * tri par naissance puis nom dans le premier cas, | ||
| + | * ordre descendant dans le second cas -- mot clé '' | ||
| <code sql linenums> | <code sql linenums> | ||
| Ligne 266: | Ligne 285: | ||
| </ | </ | ||
| + | <wrap important> | ||
| + | |||
| + | === compte === | ||
| + | |||
| + | On peut compter les items. Par exemple la requête suivante renvoie une liste de noms avec éventuellement des doublons : | ||
| + | |||
| + | <code sql> | ||
| + | SELECT nom from ARTISTE; | ||
| + | </ | ||
| + | |||
| + | Si nous n' | ||
| + | |||
| + | <code sql> | ||
| + | SELECT COUNT(nom) from ARTISTE; | ||
| + | </ | ||
| + | |||
| + | Cette requête est différente puisqu' | ||
| + | |||
| + | <WRAP tip>On compte tous les noms apparaissant, | ||
| + | |||
| + | <WRAP info> | ||
| + | |||
| + | Plus loin encore : on pourrait produire une liste avec chaque nom associé avec le nombre d' | ||
| ==== Jointure ==== | ==== Jointure ==== | ||
| Ligne 294: | Ligne 336: | ||
| <wrap important> | <wrap important> | ||
| - | ===== Des requêtes | + | <WRAP tip> |
| - | + | ||
| - | On utilise la base précédente. | + | |
| - | + | ||
| - | ==== Applications directes, sans jointure ==== | + | |
| - | + | ||
| - | - Lister tous les noms, prénoms, naissances d' | + | |
| - | - Lister tous les titreVO de films dont le réalisateur à l' | + | |
| - | - Lister tous les rôles joués par l' | + | |
| - | + | ||
| - | ==== Avec une jointure ==== | + | |
| - | + | ||
| - | - Lister tous les titreVO, année des films de Tarantino | + | |
| - | - Lister tous les rôles de Brad Pitt | + | |
| - | - (A) Lister tous les titreVO, année des films dans lequel a joué l' | + | |
| - | - Lister les noms et prénoms de tous les réalisateurs -- // | + | |
| - | + | ||
| - | ==== Avec deux jointures ==== | + | |
| - | + | ||
| - | Pour lier un artiste à un film en tant qu' | + | |
| <code sql linenums> | <code sql linenums> | ||
| - | ... FROM JOUEDANS | + | SELECT * FROM FILM, ARTISTE; |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste | + | |
| </ | </ | ||
| - | + | On obtient | |
| - | - (B) Trouver | + | |
| - | - Trouver tous les titreVO, année des films dont un acteur est né après 1970 | + | |
| - | + | ||
| - | <WRAP tip>La requête | + | |
| - | + | ||
| - | ==== Avec trois jointures... ==== | + | |
| - | + | ||
| - | Ça commence | + | |
| - | + | ||
| - | Si pour une paire acteur -- film, on veut en plus avoir le réalisateur du film, il faut en plus joindre FILM à ARTISTE selon la clé idRéal. Cette fois c'est plus difficile car ceci ne fonctionne pas : | + | |
| <code sql linenums> | <code sql linenums> | ||
| - | ... FROM JOUEDANS | + | SELECT * FROM FILM, ARTISTE WHERE FILM.idReal |
| - | JOIN FILM ON FILM.idFilm | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = FILM.idReal | + | |
| </ | </ | ||
| + | Ce qui revient à peu près au même que la jointure. | ||
| - | Car ARTISTE apparaît deux fois pour des raisons différentes. Il est possible de se sortir d' | + | //Dans tous les cas, inutile |
| - | + | </WRAP> | |
| - | <code sql linenums> | + | |
| - | ... FROM JOUEDANS | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste | + | |
| - | JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal | + | |
| - | </code> | + | |
| - | + | ||
| - | L' | + | |
| - | + | ||
| - | Supposons que l'on veuille visualiser le nom d' | + | |
| - | + | ||
| - | <code sql linenums> | + | |
| - | SELECT nom, nom, titreVO FROM JOUEDANS | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste | + | |
| - | JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal | + | |
| - | </code> | + | |
| - | + | ||
| - | car les deux occurrences | + | |
| - | + | ||
| - | <code sql linenums> | + | |
| - | SELECT acteur.nom, réalisateur.nom, | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste | + | |
| - | JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal | + | |
| - | </ | + | |
| - | + | ||
| - | - Trouver tous les noms et prénoms, rôle et titreVO pour des acteurs jouant dans un film de Tarantino | + | |
| - | - Trouver tous les noms, prénoms de réalisateurs d'un film dont dont un des acteurs est né après 1970 | + | |
| - | + | ||
| - | ===== Les réponses | + | |
| - | + | ||
| - | 1. Lister tous les noms, prénoms, naissances d' | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | </ | + | |
| - | + | ||
| - | 2. Lister tous les films dont le réalisateur | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | </ | + | |
| - | + | ||
| - | 3. Lister tous les rôles joués par l' | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | </ | + | |
| - | + | ||
| - | 4. Lister tous les titreVO, année des films de Tarantino | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | JOIN FILM ON FILM.idReal = ARTISTE.idArtiste | + | |
| - | WHERE nom = 'Tarantino'; | + | |
| - | </ | + | |
| - | + | ||
| - | 5. Lister tous les rôles | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | JOIN ARTISTE ON JOUEDANS.idArtiste = ARTISTE.idArtiste | + | |
| - | WHERE nom = ' | + | |
| - | </ | + | |
| - | + | ||
| - | 6. Lister tous les titreVO, année des films dans lequel a joué l' | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | JOIN JOUEDANS ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | WHERE idArtiste = 1; | + | |
| - | </ | + | |
| - | + | ||
| - | 7. Lister les noms et prénoms de tous les réalisateurs (*c' | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | JOIN FILM ON FILM.idReal = ARTISTE.idArtiste; | + | |
| - | </code> | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | 8. Trouver tous les titreVO, année des films dans lesquels joue un artiste nommé Willis | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste | + | |
| - | WHERE nom = ' | + | |
| - | </code> | + | |
| - | + | ||
| - | 9. Trouver tous les titreVO, année des films dont un acteur est né après 1970 | + | |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste | + | |
| - | WHERE naissance > ' | + | |
| - | </code> | + | |
| - | + | ||
| - | 10. Trouver tous les noms et prénoms, rôle et titreVO pour des acteurs jouant dans un film de Tarantino | + | |
| - | + | ||
| - | <code sql> | + | |
| - | SELECT acteur.nom, acteur.prénom, | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste | + | |
| - | JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal | + | |
| - | WHERE réalisateur.nom = ' | + | |
| - | </ | + | |
| - | + | ||
| - | 11. Trouver tous les noms, prénoms de réalisateurs d'un film dont dont un des acteurs est né après 1970 | + | |
| - | <code sql> | ||
| - | SELECT DISTINCT réalisateur.nom, | ||
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | ||
| - | JOIN ARTISTE acteur ON acteur.idArtiste = JOUEDANS.idArtiste | ||
| - | JOIN ARTISTE réalisateur ON réalisateur.idArtiste = FILM.idReal | ||
| - | WHERE acteur.naissance > ' | ||
| - | </ | ||
nsi/terminales/sql_requests.1629379175.txt.gz · Dernière modification : de goupillwiki
