nsi:terminales:sql_requests
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| nsi:terminales:sql_requests [2021/04/15 14:21] – créée goupillwiki | nsi:terminales:sql_requests [2022/08/29 21:45] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | < | + | ====== |
| - | # Requêtes SQL | + | |
| Structured Query Language : C'est un langage visant à exploiter des bases de données relationnelles. | Structured Query Language : C'est un langage visant à exploiter des bases de données relationnelles. | ||
| - | > EN 1970, Aurait dû s' | + | <WRAP info>EN 1970, Aurait dû s' |
| - | Ce langage est utilisé, à quelques variantes près, par tous les grands noms des SGBDR - *systèmes gestion BDD relationnelle* : Oracle, MySQL, MariaDB, Access, Microsoft SQL Server, PostgreSQL, SQLite, MongoDB | + | Ce langage est utilisé, à quelques variantes près, par tous les grands noms des SGBDR -- //systèmes gestion BDD relationnelle// -- Oracle, MySQL, MariaDB, Access, Microsoft SQL Server, PostgreSQL, SQLite, MongoDB |
| - | Ce langage | + | Il s'agit d' |
| - | Dans le cadre de ce premier cours, nous allons utiliser un outil permettant d' | + | Dans le cadre de ce premier cours, nous allons utiliser un outil permettant d' |
| - | ## Exemple | + | ===== Exemple |
| Afin d' | Afin d' | ||
| - |  | + | {{ 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 : | ||
| - | </ | ||
| * **ARTISTE :** __idArtiste__, | * **ARTISTE :** __idArtiste__, | ||
| Ligne 25: | Ligne 23: | ||
| * **JOUEDANS :** __// | * **JOUEDANS :** __// | ||
| - | < | ||
| Les clés primaires sont soulignées et les clés étrangères sont en italique. | Les clés primaires sont soulignées et les clés étrangères sont en italique. | ||
| - | > Nous allons utiliser des requêtes SQL pour ajouter des films, des acteurs... | + | <WRAP important>Nous allons utiliser des requêtes SQL pour ajouter des films, des acteurs... |
| - | ## Créer les tables | + | ===== Créer les tables |
| Pour créer une table on doit se poser ce genre de question : | Pour créer une table on doit se poser ce genre de question : | ||
| - | * quel est le nom de la table, | + | |
| - | * pour chaque attribut, quel est son domaine | + | * pour chaque attribut, quel est son **domaine** -- //quel est le type de valeur autorisée//, |
| - | * quel est la clé primaire (ou les clés primaires) | + | * quel est la clé primaire (ou les clés primaires) |
| - | * y a t-il des clés étrangères. | + | * y a t-il des clés étrangères. |
| - | > Dans ce qui suit, j' | + | <WRAP tip>Dans ce qui suit, j' |
| - | > | + | |
| - | > On revient à la ligne pour plus de lisibilité mais on pourrait tout écrire à la suite. Le `;` indique qu'une commande est complète. | + | |
| - | ```sql | + | On revient à la ligne pour plus de lisibilité mais on pourrait tout écrire à la suite. Le '';'' |
| + | </ | ||
| + | |||
| + | < | ||
| CREATE TABLE ARTISTE ( | CREATE TABLE ARTISTE ( | ||
| idArtiste INTEGER PRIMARY KEY, | idArtiste INTEGER PRIMARY KEY, | ||
| Ligne 69: | Ligne 67: | ||
| FOREIGN KEY(idFilm) REFERENCES FILM(idFilm) | FOREIGN KEY(idFilm) REFERENCES FILM(idFilm) | ||
| ); | ); | ||
| - | ``` | + | </ |
| - | > Dans sqlitebrowser, | + | <WRAP box> |
| + | * commencer par créer une bdd vide, | ||
| + | * chercher " | ||
| + | * chercher " | ||
| + | </ | ||
| + | |||
| + | ==== Les domaines = types de données ==== | ||
| Vous pouvez voir différents types de données : | Vous pouvez voir différents types de données : | ||
| - | * **INTEGER :** entier 4 octets. Il existe des types entiers prenant moins de place, des plus grands, des types pour les flottants... | + | |
| - | * **VARCHAR :** du texte. On précise la taille de la chaîne. VARCHAR(20) est une chaîne qui ne pourra pas dépasser 20 caractères. Se pose le problème de l'encoage. Unicode tend à s' | + | * **VARCHAR :** du texte. On précise la taille de la chaîne. |
| - | * **TEXT :** du texte en taille illimitée.**** | + | * **TEXT :** du texte en taille illimitée. |
| - | * **DATE :** une date au format AAAA-MM-JJ. On utilise aussi souvent DATETIME au format AAAA-MM-JJ hh:mm:ss | + | * **DATE :** une date au format AAAA-MM-JJ. On utilise aussi souvent DATETIME au format AAAA-MM-JJ hh:mm:ss |
| + | |||
| + | Vous remarquez également quelques '' | ||
| - | Vous remarquez également quelques `NOT NULL` destinés à empêcher qu'un champ reste vide. Si on avait toléré qu' | + | Enfin, vous pouvez voir l'écriture des contraintes de clés étrangères. Ici, un '' |
| - | Enfin, vous pouvez voir l' | + | ===== Insérer |
| - | ## Insérer des données | + | ==== Insertion d'un artiste ==== |
| - | ```sql | + | < |
| INSERT INTO ARTISTE(prénom, | INSERT INTO ARTISTE(prénom, | ||
| - | ``` | + | </ |
| Exemple d'une insertion d'un artiste, Bruce Willis. La syntaxe est assez explicite. | Exemple d'une insertion d'un artiste, Bruce Willis. La syntaxe est assez explicite. | ||
| - | > Dans sqlitebrowser, | + | <WRAP tip>Dans sqlitebrowser, |
| - | **Gestion des apostrophes | + | ==== Gestion des apostrophes |
| - | **Pas d'idArtiste :** `idArtiste` est la clé primaire, elle se crée toute seule, nous n'avons pas besoin | + | Dans le texte de la biographie, vous pouvez voir la présence de caractères '' |
| + | |||
| + | <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 ==== | ||
| Essayons maintenant une commande qui ne passe pas. | Essayons maintenant une commande qui ne passe pas. | ||
| - | ```sql | + | < |
| INSERT INTO FILM(titreVO, | INSERT INTO FILM(titreVO, | ||
| - | ``` | + | </ |
| + | |||
| + | Cette commande renverra une erreur car on n'a pas précisé '' | ||
| - | Cette commande renverra une erreur car on n'a pas précisé `idReal`, or on a préciser que `idReal` est `NOT NULL`, il faut une valeur. | + | ==== idReal est une clé étrangère ==== |
| Cette autre commande échoue. | Cette autre commande échoue. | ||
| - | ```sql | + | < |
| INSERT INTO FILM(titreVO, | INSERT INTO FILM(titreVO, | ||
| - | ``` | + | </ |
| - | Cette fois, on a bien précisé un `idReal` mais il n'y a pour l' | + | Cette fois, on a bien précisé un '' |
| On comprend qu'il faudra d' | On comprend qu'il faudra d' | ||
| - | ```sql | + | < |
| INSERT INTO ARTISTE(prénom, | INSERT INTO ARTISTE(prénom, | ||
| - | ``` | + | </ |
| - | Après l' | + | Après l' |
| - | ```sql | + | < |
| INSERT INTO FILM(titreVO, | INSERT INTO FILM(titreVO, | ||
| - | ``` | + | </ |
| + | |||
| + | ==== insertion d'une association JOUEDANS ==== | ||
| Pour compléter, ajoutons une entrée JOUEDANS : | Pour compléter, ajoutons une entrée JOUEDANS : | ||
| - | ```sql | + | < |
| INSERT INTO JOUEDANS(idArtiste, | INSERT INTO JOUEDANS(idArtiste, | ||
| - | ``` | + | </ |
| - | + | ===== Modification d'une donnée | |
| - | + | ||
| - | ## Modification d'une donnée | + | |
| John McTiernan n'est pas né le 08/01/1952 mais le 08/01/1951. On souhaite donc modifier cette donnée. | John McTiernan n'est pas né le 08/01/1952 mais le 08/01/1951. On souhaite donc modifier cette donnée. | ||
| - | ```sql | + | < |
| UPDATE ARTISTE SET naissance = ' | UPDATE ARTISTE SET naissance = ' | ||
| - | ``` | + | </ |
| + | |||
| + | Là encore la commande est assez explicite. | ||
| - | Là encore la commande est assez explicite. | + | <WRAP important> |
| - | ```sql | + | < |
| UPDATE ARTISTE SET nom = UPPER(nom); | UPDATE ARTISTE SET nom = UPPER(nom); | ||
| - | ``` | + | </ |
| + | |||
| + | En l' | ||
| + | </ | ||
| - | En l' | ||
| Bien sûr, la commande suivante échoue : | Bien sûr, la commande suivante échoue : | ||
| - | ```sql | + | < |
| UPDATE FILM SET idReal = 25 WHERE titreVO = 'Die Hard'; | UPDATE FILM SET idReal = 25 WHERE titreVO = 'Die Hard'; | ||
| - | ``` | + | </ |
| à cause de la contrainte de clé étrangère : l' | à cause de la contrainte de clé étrangère : l' | ||
| - | ```sql | + | < |
| UPDATE FILM SET idReal = 1 WHERE titreVO = 'Die Hard'; | UPDATE FILM SET idReal = 1 WHERE titreVO = 'Die Hard'; | ||
| - | ``` | + | </ |
| - | S'il y avait plusieurs films de même `titreVO`, ils seraient tous affectés. | + | S'il y avait plusieurs films de même '' |
| - | *Remettez idReal à 2 pour la suite.* | + | //Remettez idReal à 2 pour la suite.// |
| - | ## Suppression d'une donnée | + | ===== Suppression d'une donnée |
| - | La commande est `DELETE`. Commençons par un cas qui ne fonctionne pas pour cause de clé étrangère : | + | La commande est '' |
| - | ```sql | + | < |
| DELETE FROM ARTISTE WHERE prénom = ' | DELETE FROM ARTISTE WHERE prénom = ' | ||
| - | ``` | + | </ |
| D' | D' | ||
| - | Ici, comme Bruce Willis est rattaché au film Die Hard, la suppresion | + | Ici, comme Bruce Willis est rattaché au film Die Hard, la suppression |
| - | En revanche, celle ci fonctionne - *remarquez au passage l' | + | En revanche, celle ci fonctionne -- //remarquez au passage l' |
| - | ```sql | + | < |
| DELETE FROM JOUEDANS WHERE idArtiste = 1 AND idFilm = 1; | DELETE FROM JOUEDANS WHERE idArtiste = 1 AND idFilm = 1; | ||
| - | ``` | + | </ |
| - | ## Consulter la table | + | ===== Consulter la table ===== |
| - | Nous abons vu comment créer la base, créer des items, en supprimer, en modifier. | + | Nous avons vu comment créer la base, créer des items, en supprimer, en modifier. |
| Nous allons passer maintenant aux commandes permettant d'en explorer le contenu. | Nous allons passer maintenant aux commandes permettant d'en explorer le contenu. | ||
| - | Une base est construite par des milliers d' | + | <WRAP box>Une base est construite par des milliers d' |
| - | Vous disposez du fichier | + | Vous disposez du fichier |
| + | </ | ||
| - | ### Sélection | + | ==== Sélection |
| - | La commande `SELECT` permet d' | + | === cas le plus simple |
| - | ```sql | + | La commande '' |
| + | |||
| + | < | ||
| SELECT * FROM ARTISTE; | SELECT * FROM ARTISTE; | ||
| - | ``` | + | </ |
| - | `*` est un symbole couramment utilisé quand on veut dire TOUT. Donc ici on renvoie toutes les colonnes pour toute la table ARTISTE. | + | '' |
| - | ```sql | + | === projection === |
| + | |||
| + | < | ||
| SELECT nom, prénom FROM ARTISTE; | SELECT nom, prénom FROM ARTISTE; | ||
| - | ``` | + | </ |
| + | |||
| + | Presque la même chose, sinon que l'on ne demande que la colonne '' | ||
| - | Presque la même chose, sinon que l'on ne demande que la colonne nom et la colonne prénom. On parle de **projection**. | + | === clause WHERE === |
| - | ```sql | + | < |
| SELECT nom, prénom FROM ARTISTE WHERE naissance > ' | SELECT nom, prénom FROM ARTISTE WHERE naissance > ' | ||
| - | ``` | + | </ |
| La clause WHERE permet de limiter le retour aux seuls artistes dont la naissance vient après le 01/01/1970. | La clause WHERE permet de limiter le retour aux seuls artistes dont la naissance vient après le 01/01/1970. | ||
| - | ```sql | + | === clause LIKE === |
| + | |||
| + | < | ||
| SELECT nom, prénom FROM ARTISTE WHERE nom LIKE ' | SELECT nom, prénom FROM ARTISTE WHERE nom LIKE ' | ||
| - | ``` | + | </ |
| - | LIKE signifie RESSEMBLE, ici on ne garde que les artistes dont le nom commence par 'Bo'. | + | '' |
| - | On peut éviter d' | + | === doublons, |
| - | ```sql | + | On peut éviter d' |
| + | |||
| + | < | ||
| SELECT rôle FROM JOUEDANS; | SELECT rôle FROM JOUEDANS; | ||
| SELECT DISTINCT rôle FROM JOUEDANS; | SELECT DISTINCT rôle FROM JOUEDANS; | ||
| - | ``` | + | </ |
| - | Et on peut trier - *tri par naissance puis nom dans le premier cas, ordre descendant dans le second cas*. | + | === tri === |
| - | ```sql | + | Et on peut trier : |
| + | * tri par naissance puis nom dans le premier cas, | ||
| + | * ordre descendant dans le second cas -- mot clé '' | ||
| + | |||
| + | < | ||
| SELECT nom, prénom FROM ARTISTE ORDER BY naissance, nom; | SELECT nom, prénom FROM ARTISTE ORDER BY naissance, nom; | ||
| SELECT nom, prénom FROM ARTISTE ORDER BY naissance DESC; | SELECT nom, prénom FROM ARTISTE ORDER BY naissance DESC; | ||
| - | ``` | + | </ |
| + | |||
| + | <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; | ||
| + | </ | ||
| - | ### Jointure | + | 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 | ||
| Si je veux afficher les films | Si je veux afficher les films | ||
| - | ```sql | + | < |
| SELECT * FROM FILM; | SELECT * FROM FILM; | ||
| - | ``` | + | </ |
| On n'est pas très satisfait car on ne voit pas le nom du réalisateur, | On n'est pas très satisfait car on ne voit pas le nom du réalisateur, | ||
| Ligne 250: | Ligne 322: | ||
| On réalise pour cela une **jointure**. | On réalise pour cela une **jointure**. | ||
| - | ```sql | + | < |
| SELECT * FROM FILM JOIN ARTISTE ON FILM.idReal = ARTISTE.idArtiste; | SELECT * FROM FILM JOIN ARTISTE ON FILM.idReal = ARTISTE.idArtiste; | ||
| - | ``` | + | </ |
| Et voilà ! | Et voilà ! | ||
| Ligne 258: | Ligne 330: | ||
| On peut bien sûr limiter les colonnes, filtrer avec WHERE, trier, tout cela en même temps : | On peut bien sûr limiter les colonnes, filtrer avec WHERE, trier, tout cela en même temps : | ||
| - | ```sql | + | < |
| SELECT titreVO, année, nom, prénom FROM FILM JOIN ARTISTE ON FILM.idReal = ARTISTE.idArtiste WHERE année > 2000 ORDER BY naissance; | SELECT titreVO, année, nom, prénom FROM FILM JOIN ARTISTE ON FILM.idReal = ARTISTE.idArtiste WHERE année > 2000 ORDER BY naissance; | ||
| - | ``` | + | </code> |
| - | + | ||
| - | *Remarque : ORDER BY doit être après WHERE* | + | |
| - | + | ||
| - | ## Des requêtes de séléction pour s' | + | |
| - | + | ||
| - | On utilise la base précédente. | + | |
| - | + | ||
| - | ### Applications directes, sans jointure | + | |
| - | + | ||
| - | 1. Lister tous les noms, prénoms, naissances d' | + | |
| - | 2. Lister tous les titreVO de films dont le réalisateur à l' | + | |
| - | 3. Lister tous les rôles joués par l' | + | |
| - | + | ||
| - | ### Avec une jointure | + | |
| - | + | ||
| - | 4. Lister tous les titreVO, année des films de Tarantino | + | |
| - | 5. Lister tous les rôles de Brad Pitt | + | |
| - | 6. Lister tous les titreVO, année des films dans lequel a joué l' | + | |
| - | 7. Lister les noms et prénoms de tous les réalisateurs (*c' | + | |
| - | + | ||
| - | ### Avec deux jointures | + | |
| - | + | ||
| - | Pour lier un artiste à un film en tant qu' | + | |
| - | + | ||
| - | ```sql | + | |
| - | ... FROM JOUEDANS | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste | + | |
| - | ``` | + | |
| - | + | ||
| - | 8. Trouver tous les titreVO, année des films dans lesquels joue un artiste nommé Willis | + | |
| - | + | ||
| - | 9. Trouver tous les titreVO, année des films dont un acteur est né après 1970 | + | |
| - | + | ||
| - | *Remarque : La requête 8. correspond à la requête 6. mais nécessite une jointure supplémentaire. En situation réelle, on sera plutôt dans la situation du 6. car on connaîtra l'id de Bruce Willis* | + | |
| - | + | ||
| - | ### Avec trois jointures... | + | |
| - | + | ||
| - | *Ça commence à devenir plus compliqué et on ne vous demande pas d' | + | |
| - | + | ||
| - | 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 : | + | |
| - | + | ||
| - | ```sql | + | |
| - | ... FROM JOUEDANS | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = FILM.idReal | + | |
| - | ``` | + | |
| - | + | ||
| - | Car ARTISTE apparaît deux fois pour des raisons différentes. Il est possible de se sortir d' | + | |
| - | + | ||
| - | ```sql | + | |
| - | ... 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 | + | |
| - | ``` | + | |
| - | + | ||
| - | L' | + | |
| - | + | ||
| - | Supposons que l'on veuille visualiser le nom d' | + | |
| - | + | ||
| - | ```sql | + | |
| - | 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 | + | |
| - | ``` | + | |
| - | + | ||
| - | car les deux occurences de nom sont ambigues : est-ce nom pour la première occurence de ARTISTE (acteur) ou la deuxième (réalisateur) ? Il faudra préciser : | + | |
| - | + | ||
| - | ```sql | + | |
| - | 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 | + | |
| - | ``` | + | |
| - | + | ||
| - | 10. Trouver tous les noms et prénoms, rôle et titreVO pour des acteurs jouant dans un film de Tarantino | + | |
| - | + | ||
| - | 11. 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 à l' | + | |
| - | + | ||
| - | | + | |
| - | | + | |
| - | ``` | + | |
| - | + | ||
| - | 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 = ' | + | |
| - | ``` | + | |
| - | + | ||
| - | 5. Lister tous les rôles de Brad Pitt | + | |
| - | + | ||
| - | | + | |
| - | | + | |
| - | 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; | + | |
| - | ``` | + | |
| - | + | ||
| - | | + | |
| - | + | ||
| - | 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 = ' | + | |
| - | ``` | + | |
| - | + | ||
| - | 9. Trouver tous les titreVO, année des films dont un acteur est né après 1970 | + | |
| - | | + | <wrap important> |
| - | | + | |
| - | JOIN FILM ON FILM.idFilm = JOUEDANS.idFilm | + | |
| - | JOIN ARTISTE ON ARTISTE.idArtiste = JOUEDANS.idArtiste | + | |
| - | WHERE naissance | + | |
| - | ``` | + | |
| - | 10. Trouver | + | <WRAP tip> |
| + | <code sql linenums> | ||
| + | SELECT * FROM FILM, ARTISTE; | ||
| + | </ | ||
| + | On obtient | ||
| + | <code sql linenums> | ||
| + | SELECT * FROM FILM, ARTISTE WHERE FILM.idReal = ARTISTE.idArtiste; | ||
| + | </ | ||
| + | Ce qui revient à peu près au même que la jointure. | ||
| - | ```sql | + | //Dans tous les cas, inutile de vous remplir la tête de code SQL. On souhaite surtout que vous sachiez écrire des requêtes simples et que vous arriviez à comprendre. La requête précédente, même si elle n'est pas facile de la trouver tout seul, ne devrait pas être trop difficile à comprendre.// |
| - | SELECT acteur.nom, acteur.prénom, rôle, 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 | + | |
| - | 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 | ||
| - | ```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.1618489307.txt.gz · Dernière modification : de goupillwiki
