Je me demande simplement si toutes les jointures suivantes sont logiquement équivalentes, et si non, pourquoi pas?Toutes ces jointures SQL sont-elles logiquement équivalentes?
SELECT t1.x, t2.y from t1, t2 where t1.a=t2.a and t1.b=t2.b and t1.c = t2.c;
SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a where t1.b=t2.b and t1.c = t2.c;
SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a and t1.b=t2.b where t1.c = t2.c;
SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a and t1.b=t2.b and t1.c = t2.c;
je pense est ma vraie question: ne Combining « où » avec « sur » faire quelque chose de différent de simplement avoir plusieurs conditions avec associés avec AND « sur »?
Je travaille avec MySQL, au cas où cela ferait une différence.
La première requête exécuterait-elle complètement la jointure croisée, ou le SGBD est-il suffisamment intelligent pour appliquer la clause where en premier? –
SQL Server éditions 2000 partiront inférer l'exemple le plus haut comme INNER JOINs. Testez-le et affichez le plan d'exécution –
La réponse à cette question dépend du SGBD. Je sais que dans Oracle, l'optimiseur est assez intelligent pour choisir le même plan d'exécution dans les 4 cas, mais je ne connais pas d'autres SGBD comme mySQL. –