Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 2013
-
16 août 2009 à 13:10
nivsql
Messages postés159Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention14 décembre 2010
-
17 août 2009 à 19:45
Bonjour,
je suis étudiant en info et je dois repasser mon cours de SQL , j'ai donc une petite question à vous demandez
(J'y ai déjà répondu, j'aimerais juste être corrigé en cas de faute ;) )
Listez les sections dans lesquelles donnent cours des professeurs diplomés en 2000 . NB : chaque section ne doit apparaître qu'une fois.
En jointure :
Select distinct section
From AnneeEtude , Cours Professeur
Where AnneeEtude.Code = Cours.Annee
and Cours.Prof = Professeur.Matricule
and AnneeDiplome = 2000;
En SubQuery :
Select distinct section
From AnneeEtude
Where Code in Select Annee
From Cours
Where prof in Select matricule
From Professeur
where AnneeDiplome = 2000;
Voila, j'aimerais juste savoir si ces réponses sont bonnes et équivalentes.
nivsql
Messages postés159Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention14 décembre 20101 16 août 2009 à 17:27
La premiere semble Bonne dans l'esprit mais la synthaxe est pas terrible (manque une virgule dans la clause from, coquille rien de grave) car pas normative. Les critere de jointure devrait etre exprime dans des clause JOIN et non dans le where ;)
La seconde me semble fausse et surtout au niveau execution sur un SGBD les performance vont etre désastreuses ;)
nivsql
Messages postés159Date d'inscriptionlundi 22 juin 2009StatutMembreDernière intervention14 décembre 20101 17 août 2009 à 19:45
Autant pour moi, la 2eme solution te rendra le bon resultat aussi, c'est ton modele de donnée qui prete a confusion (attention au nomage des colonnes !)
De maniere général il serait faux de dire que les subquery sont plus lentes. Mais dans ton cas particulier c'est 100 Fois oui.
Ne perd jamais de vue que le SQL et les SGBDR s'appuie sur un modele ensembliste et sur l'algebre qui vas avec (l'algebre relationnel). Essaye de transcire tes 2 requete en algebre relationnel et tu constatera que la premiere est de loins la plus simple et celle qui necessite le moins d'operation et surtout celle qui au final manipulera le moins de donnée (ce qui se reperctuera en mémoire sur ton SGBD par une consomation de ram inferieure).