Exercice - Requêtes SQL
Exercice tiré du sujet 0 de l'épreuve terminale de NSI – Exercice 4
L’énoncé de cet exercice utilise les mots du langage SQL suivants : SELECT, FROM, WHERE, JOIN, INSERT INTO, VALUES, COUNT, ORDER BY.
Dans un lycée imaginaire, les données relatives aux élèves de secondes sont regroupées dans un fichier nommé seconde_lyc.csv. Un extrait de son contenu est ci-dessous.
| num_eleve | nom | prenom | datenaissance | langue1 | langue2 | option | classe |
|---|---|---|---|---|---|---|---|
| 133310FE | ACHIR | Mussa | 01/01/2005 | anglais | espagnol | 2A | |
| 156929JJ | ALTMEYER | Yohan | 05/05/2005 | allemand | anglais | théâtre | 2D |
| 500633KH | BELEY | Thibaut | 05/05/2005 | anglais | espagnol | 2A | |
| 911887GA | BELEY | Marie | 05/05/2005 | anglais | espagnol | 2A | |
| 906089JJ | BELEY | Manon | 10/01/2005 | anglais | allemand | 2E | |
| 488697GA | CAILLE | Marie | 30/03/2004 | italien | anglais | 2D | |
| 193514FB | CHARPENTIER | Jules | 26/12/2005 | espagnol | anglais | 2C | |
| 321188FA | CLAUDEL | Benjamin | 09/09/2005 | espagnol | anglais | 2E | |
| 081282GF | EISEN | Carla | 23/06/2004 | anglais | allemand | 2A | |
| 026946KB | ELAYAR | Amir | 11/09/2005 | anglais | arabe | cinéma | 2D |
| 108303KG | GEHIN | Arthur | 26/02/2005 | allemand | anglais | 2D | |
| 057934BK | GROSJEAN | Alexandre | 09/11/2005 | anglais | espagnol | 2C | |
| 571113KE | HENRY | Paul | 12/03/2005 | allemand | anglais | 2E | |
| 488820DE | JAQUEY | Marc | 13/11/2005 | anglais | italien | 2D | |
| 024810CE | JULIANO | Alberto | 21/04/2005 | anglais | espagnol | 2C | |
| 249992EJ | KLEIBER | Gusti | 20/02/2005 | anglais | espagnol | cinéma | 2E |
| 422698AF | LACOUR | Julie | 06/04/2005 | italien | anglais | 2D | |
| 026454FA | LARBI | Nourdine | 14/07/2005 | espagnol | anglais | 2C | |
| 309341GD | LEFZA | Yasmina | 26/11/2005 | espagnol | anglais | 2E | |
| 076725HD | MARTIN | Victor | 13/03/2005 | anglais | espagnol | 2A | |
| 815183CB | NGUYEN | Ngong | 16/03/2005 | anglais | espagnol | 2D | |
| 094002FC | PELTIER | Romane | 14/06/2005 | allemand | anglais | 2D | |
| 321262HD | RENAULT | Zoé | 06/08/2005 | anglais | espagnol | latin | 2E |
| 075421AK | ROTH | Ursule | 03/01/2005 | anglais | allemand | 2A | |
| 121001CK | SERHANI | Sabrina | 01/09/2005 | italien | anglais | 2D | |
| 538965DJ | TLIDJANE | Yourk | 31/01/2005 | espagnol | anglais | 2D | |
| 389873GC | VIALET | Priscille | 28/02/2005 | espagnol | anglais | 2C | |
| 980306CA | WADE | Marcelin | 03/05/2005 | allemand | anglais | 2E | |
| 807158DH | WENGER | Alexandre | 20/08/2005 | allemand | anglais | 2A | |
| 666702FA | YAMAN | Elamine | 23/04/2005 | anglais | arabe | 2D |
Pour les besoins de l'organisation du lycée, le chef d’établissement exploite la base de données par des requêtes en langage SQL. Il a pour cela créé une table (ou relation) SQL dénommée seconde dans son système de gestion de bases de données dont la structure est la suivante :
| seconde |
|---|
| num_eleve (clef primaire) |
| langue1 |
| langue2 |
| option |
| classe |
L’attribut num_eleve est un entier, les autres sont des chaînes de caractère (le type CHAR).
Question 1
- Dans le modèle relationnel, quel est l'intérêt de l'attribut
num_eleve. - Écrire une requête SQL d'insertion permettant d’enregistrer l'élève ACHIR Mussa dans la table seconde – Les informations relatives à cet élève sont données dans la ligne 1 du fichier
seconde_lyc.csv. - Lors de l'insertion de l'élève ALTMEYER Yohan – ligne 2 du fichier
seconde_lyc.csv– une erreur de saisie a été commise sur la première langue, qui devrait être allemand. Écrire une requête SQL de mise à jour corrigeant les données de cet élève.
Question 2
On suppose maintenant que la table seconde contient les informations issues de l'extrait de fichier csv donné précédemment – Même si on a dit que ce n'était qu'un extrait, faire comme si c'était la totalité du fichier seconde_lyc.csv.
- Quel est le résultat de la requête
SELECT num_eleve FROM seconde;? - On rappelle qu'en SQL, la fonction d’agrégation
COUNT()permet de compter le nombre d'enregistrements dans une table.
Quel est le résultat de la requête
SELECT COUNT(num_eleve) FROM seconde ;? - Écrire la requête permettant de connaître le nombre d'élèves qui font allemand en langue1 ou langue2.
Question 3
Le chef d'établissement souhaite faire évoluer la structure de sa base de données. Pour ce faire, il créé une nouvelle table eleve dont la structure est la suivante :
| eleve |
|---|
| num_eleve (clef primaire, clef étrangère de la table seconde) |
| nom |
| prenom |
| datedenaissance |
Là encore, l'attribut num_eleve est un entier, les autres sont des chaînes de caractère (le type CHAR).
- Expliquer ce qu'apporte l’information clef étrangère pour l'attribue
num_elevede cette table en termes d'intégrité et de cohérence. - On suppose la table
elevecorrectement créée et complétée. Le chef d'établissement aimerait lister les élèves – nom, prénom, date de naissance – de la classe 2A.
Écrire la commande qui permet d'établir cette liste à l’aide d’une jointure entreeleveetseconde.
Question 4
Proposer la structure d'une table coordonnees dans laquelle on pourra indiquer, pour chaque élève, son adresse, son code postal, sa ville, son adresse mail. Préciser la clef primaire et/ou la clé étrangère en vue de la mise en relation avec les autres tables.
