2010-11-29 4 views
3

Possible en double:
Is there something wrong with joins that don't use the JOIN keyword in SQL or MySQL?SQL - Avantages de JOINs?

Salut,

i'ave données toujours récupérées sans joints ...

, mais est-il un avantage à une méthode plus L'autre?

select * from a INNER JOIN b on a.a = b.b; 

select a.*,b.* from a,b where a.a = b.b; 

Merci!

+1

Similaire à (sinon identique) à cette question: http://stackoverflow.com/questions/128965/is-there-something-wrong-with-joins-that-dont-use-the-join-keyword- in-sql-or-mys – ZoFreX

+3

ce sont les deux jointures ... – Donnie

Répondre

0

Il s'agit des deux jointures. ce ne sont que deux représentations syntaxiques différentes pour les jointures. La première, (en utilisant le « Join » mot-clé, est la norme ANSI (à partir de 1992, je pense).

Dans le cas des jointures internes ne, les deux représentations differeent sont fonctionnellement identiques, mais celui-ci La syntaxe standard ANSI SQL92 est beaucoup plus lisible moiré, une fois que vous y êtes habitué, car chaque condition de jointure individuelle est associée à la paire de résultats intermédiaires jointe. Dans l'ancienne représentation, les conditions de jointure sont toutes ensemble, avec les requêtes globales 'conditions de filtre, dans la clause where, et il n'est pas aussi clair qui est qui.Cela rend l'identification des mauvaises conditions de jointure (où, par exemple, un produit cartésien non intentionnel sera généré) beaucoup plus difficile.

Mais le plus important, peut-être, est que, lorsque vous effectuez une externe JOIN, dans certains scénarios, la syntaxe est plus equivilent pas, et en fait va générer le MAL ResultSet.

Vous devez passer à la syntaxe la plus récente pour toutes vos requêtes.

0

Vous avez toujours récupéré les données avec des jointures. La deuxième requête utilise l'ancienne syntaxe, mais en arrière-plan, elle est toujours jointe :)

2

Je dirais que le plus grand avantage est la lisibilité. La version avec les types de jointures explicitement nommés est beaucoup plus facile à comprendre pour moi.

8

La première méthode en utilisant le mot-clé INNER JOIN est:

  • ANSI SQL standard
  • beaucoup plus propre et plus expressif

Par conséquent, je grince des dents toujours quand je vois la deuxième option utilisée - elle bloque simplement votre clause WHERE, et vous ne pouvez pas vraiment voir d'un coup d'oeil comment les tables sont jointes (sur quels champs). Si vous oubliez l'une des conditions JOIN dans une longue liste d'expressions de clause WHERE, vous obtenez soudainement un produit cartésien désordonné ..... impossible de le faire avec le mot clé INNER JOIN (vous devez indiquer quel champ (s) de se joindre à).

+0

Eh bien, il y a des situations où l'ancienne syntaxe est réellement plus lisible. Et généralement, c'est juste une question de préférence personnelle. –

1

Vous utilisez une syntaxe différente pour un JOIN, fondamentalement. En ce qui concerne les meilleures pratiques, il est préférable d'utiliser la première syntaxe (explicite JOIN) car l'objectif de la requête est plus clair et facilite la maintenance du code.

0

Cela dépend du SGBDR mais dans le cas du serveur SQL, je comprends que l'utilisation de la syntaxe précédente permet une meilleure optimisation. C'est moins une question SQL et plus d'une question spécifique au vendeur.

Vous pouvez également utiliser les fonctions de type EXPLAIN (SQL Server: Query Execution Plan) pour vous aider à comprendre s'il y a une différence. Chaque requête est unique et j'imagine que les statistiques stockées peuvent (et vont) modifier le comportement.