hou$$am Fondateur
Nombre de messages : 386 Localisation : Tlemcen-Algeria Date d'inscription : 04/01/2007
| Sujet: Initiation au SQL / Les requêtes multi-tables Jeu 11 Jan - 2:36 | |
| # = clé primaire _ = clé étrangère
Soit 4 tables : Eleves(#RefElv, NomElv, PreElv, VilleElv, ClasseElv), Classes(#NomCla, Niveau), Cours(#RefElv, #NomMat, NbHeure), Matieres(#NomMat).
Requêtes où les données sélectionnées sont dans plusieurs tables Liste des élèves avec leur niveau.
- Code:
-
SELECT NomElv, PreElv, Niveau FROM Eleves, Classes WHERE Eleves.ClasseElv = Classes.NomCla;
Liste des élèves et nom des cours qu'ils suivent pendant plus de 3 heures.
- Code:
-
SELECT NomElv, NomMat FROM Eleves, Cours WHERE (Eleves.RefElv = Cours.RefElv) AND (Cours.NbHeure > 3); (d'abord il faut faire les jointures puis après les sélections)
Requêtes où les données proviennent d'une table mais où la condition de sélection est faite sur une table differente Liste des élèves de 1ère.
- Code:
-
SELECT NomElv, PreElv FROM Eleves WHERE ClasseElv IN (SELECT NomCla FROM Classes WHERE Niveau = '1ère');
Liste des élèves qui font de la Peinture pendant plus de 2 heures.
- Code:
-
SELECT NomElv, PreElv FROM Eleves WHERE RefElv IN (SELECT RefElv FROM Cours WHERE (NomMat = 'Peinture') AND (NbHeure > 2));
Liste des élèves habitant Toulon et suivant des cours de Macramé et de niveau BTS.
- Code:
-
SELECT NomElv, PreElv FROM Eleves WHERE (VilleElv = 'Toulon') AND (RefElv IN (SELECT RefElv FROM Cours WHERE (NomMat = 'Macramé'))) AND (ClasseElv IN (SELECT NomCla FROM Classes WHERE (Niveau = 'BTS')));
Ce qu'il ne faut pas faire Liste des élèves de niveau Terminale.
- Code:
-
SELECT NomElv, PreElv FROM Eleves, Classes WHERE (Eleves.ClasseElv = Classes.NomCla) AND (Niveau = 'Terminale'); Voici la bonne méthode :
- Code:
-
SELECT NomElv, PreElv FROM Eleves WHERE ClasseElv IN (SELECT NomCla FROM Classes WHERE (Niveau = 'Terminale')); | |
|