Problème choix syntaxe jointure

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

filidanril
Nouveau WRInaute
 
Messages: 2
Inscription: Lun Déc 06, 2004 19:25

Problème choix syntaxe jointure

Message le Lun Aoû 04, 2008 11:07

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

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1196
Inscription: Ven Fév 13, 2004 20:33

Message le Lun Aoû 04, 2008 12:03

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.


sureau
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 192
Inscription: Lun Mar 07, 2005 15:25

Message le Lun Aoû 04, 2008 13:09

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 :) )

filidanril
Nouveau WRInaute
 
Messages: 2
Inscription: Lun Déc 06, 2004 19:25

Message le Lun Aoû 04, 2008 15:08

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!


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité