web-dev-qa-db-fra.com

Différence entre les jointures internes et les instructions SQL dans les jointures select join

J'ai deux instructions de jointure SQL de jointure:

select a.id from table_a as a, table_b as b where a.id=b.id;
select a.id from table_a as a inner join table_b as b on a.id=b.id;

De toute évidence, ils sont les mêmes dans le résultat. Mais y a-t-il une différence entre eux, tels que la performance, la portabilité.

18
爱国者

Une différence est que la première option cache l'intention en exprimant la condition de jointure dans la clause where.

La deuxième option, dans laquelle la condition de jointure est écrite, est plus claire pour l'utilisateur qui lit la requête. Il montre l'intention exacte de la requête.

En ce qui concerne les performances ou toute autre différence, il ne devrait en exister aucune. Les deux requêtes doivent renvoyer exactement le même résultat et fonctionner de la même manière dans la plupart des SGBDR.

20
Icarus

La syntaxe de jointure interne a été ajoutée à SQL au cours des années 1990. Il est possible, mais improbable, que l'optimiseur puisse mieux l'utiliser qu'avec l'ancienne syntaxe utilisant la clause where pour la condition de jointure.

Ils devraient tous les deux être très portables, comme c'est le cas actuellement.

La syntaxe de la jointure interne est préférable car elle est plus simple pour le lecteur, comme d'autres l'ont déjà fait remarquer.

3
Walter Mitty

Les deux sont en SQL standard. Différents systèmes de base de données peuvent les optimiser différemment, mais comme ils sont si simples, je serais un peu surpris s'ils le font. Mais telle est la nature de SQL: il est déclaratif, ce qui laisse à l'implémentation une grande marge de manœuvre pour l'exécution de votre requête. Il n'y a aucune garantie que ceux-ci effectuent la même chose, ou s'ils sont différents, ce qui est plus rapide.

0
Ned Batchelder

Ils sont exactement les mêmes dans SQL Server. Il n'y a pas de différence de performance.

0
Bishnu Paudel