SubQuery et ou condition de jointure

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 16 août 2009 à 13:10
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 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 ;) )

Schéma :


lien : http://www.casimages.com/img.php?i=090816010529675578.png

La question :

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.

Merci

4 réponses

Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
16 août 2009 à 13:11
désolé le schéma ne s'affiche pas , mais le lien est OK pour le moment ;)
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
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 ;)
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
17 août 2009 à 19:34
merci de m'avoir répondu , serais tu me dire ce qu'il ne veut pas avec la solution 2 stp?
elle me semblait bonne pourtant ...

les subquery sont plus lentes ?

Nico
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
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).
0
Rejoignez-nous