Problème choix syntaxe jointure

Nouveau WRInaute
Bonjour,

j'ai créée une bdd de protéines qui contient notamment ces 5 tables :
- protein (id, subfamily_idSF, Name)
- subfamily (idSf, Family_idF, Name)
- family(idF, Class_idC, Name)
- class (idC, superclass_idSC, name)
- sueprclass (idSC, name)

J'aimerai sortir toutes les proteines qui appartiennent à la superclasse qui a l'id=1.

J'ai écris une requête avec join :

SELECT TF.ID
FROM subfamily SF
LEFT JOIN transcriptionfactor TF ON SF.idSF = TF.Subfamily_idSF LEFT JOIN family F ON F.idF = SF.Family_idF
LEFT JOIN class C ON C.idC= F.Class_idC
LEFT JOIN superclass SC ON SC.idSC = C.Superclass_idSC
WHERE SC.idSC=1

et une requête de cette sorte :

SELECT TF.ID FROM transcriptionfactor TF, subfamily SF, family F, class C, superclass SC
WHERE SF.idSF = TF.Subfamily_idSF
AND F.idF = SF.Family_idF
AND C.idC= F.Class_idC
AND SC.idSC = C.Superclass_idSC
AND SC.idSC=1

Elles marchent toutes les deux mais je ne sais quelle écriture conservée. En effet, la bdd est beaucoup plus grosse et j'ai de très nombreuses requêtes a effectuées et je n'arrive pas à savoir laquelle de ces écritures est la plus rapide et la plus formelle.
Laquelle me conseillez-vous?

Merci d'avance
 
WRInaute accro
Attention: formellement, les deux notations ne veulent pas dire la même chose (mais il est possible que le résultat soit le même dans ton cas particulier). Elles voudraient dire la même chose si tu utilisais des JOINs "normaux" (JOIN tout court ou INNER JOIN).

Si tu fais ce changement, en pratique c'est exactement la même chose. La notation avec les JOINs est théoriquement plus formelle et certains la trouvent plus lisible, mais en pratique c'est pareil.

Si par contre tu tiens à ce que ce soit un LEFT JOIN alors comme elles ne sont pas équivalentes, tu n'as pas le choix entre les deux :)

Jacques.
 
WRInaute discret
De plus en utilisant des inner join ou les jointures de ton second cas, tu n'auras pas du tout les mêmes résultats en terme de ressources.

Il vaut mieux utiliser les méthodes avec join :
- les jointures en where ne font pas de différence entre le filtrage et la jointure (lors de la jointures, tous les enregistrements sont récupérés et lus pour voir si ils rentrent dans le where, alors qu'avec le join, seuls ceux de la condition ON sont analysés)
- Meilleur lisibilité car on distingue facilement les filtres de chaque table


Si tu as beaucoup d'enregistements dans tes tables, une petite exécution des 2 requetes de donnera rapidement une réponse (souvent visible à l'oeil :) )
 
Nouveau WRInaute
Oki merci beaucoup a vous deux.

En effet, je pensais que les deux syntaxes voulaient dire la même chose donc j'ai changé LEFT JOIN par INNER JOIN et je vais donc utiliser cette syntaxe.

Encore merci et bonne continuation!
 
Discussions similaires
Haut