====== Exercice - Requêtes SQL ======
Exercice tiré du {{ .:sujet_0.pdf |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_eleve'' de cette table en termes d'intégrité et de cohérence.
- On suppose la table ''eleve'' correctement 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** entre ''eleve'' et ''seconde''.
=== 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.