web-dev-qa-db-fra.com

Quel est le comportement par défaut de MySQL JOIN, INNER ou OUTER?

J'ai donc regardé sur Internet au cours de la dernière heure, lisant et cherchant la réponse définitive à cette question simple.

Quelle est la valeur par défaut de JOIN dans MySQL?

SELECT * FROM t1 JOIN t2

Est-ce la même chose que

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

Autre question connexe, lorsque vous utilisez les clauses "WHERE", est-ce la même chose que JOIN ou INNER JOIN?

Pour le moment, je pense qu'un JOIN autonome est identique à l'utilisation de virgules et de clauses WHERE.

79
Quang Van

En écriture MySQL, JOIN non qualifiée implique INNER JOIN. En d'autres termes, la variable INNER dans INNER JOIN est facultative. INNER et CROSS sont des synonymes dans MySQL. Pour plus de clarté, j'écris JOIN ou INNER JOIN si j'ai une condition de jointure et CROSS JOIN si je n'ai pas de condition.

La syntaxe autorisée pour les jointures est décrite dans la documentation


À l'heure actuelle, je pense qu'un JOIN autonome n'est rien de plus (identique à) en utilisant des virgules et des clauses WHERE.


L'effet est le même, mais l'histoire derrière eux est différente. La syntaxe par virgule provient de la norme ANSI-89. Cependant, cette syntaxe pose un certain nombre de problèmes. C'est pourquoi le mot-clé JOIN a été introduit dans la norme ANSI-92.

Je vous recommande fortement d'utiliser always la syntaxe JOIN plutôt que la virgule.

  • T1 JOIN T2 ON ... est plus lisible que T1, T2 WHERE ....
  • Il est plus facile à gérer car les relations entre les tables et les filtres sont clairement définis plutôt que mélangés.
  • La syntaxe JOIN est plus facile à convertir en OUTER JOIN que la syntaxe par virgule.
  • Le mélange de la virgule et de la syntaxe JOIN dans la même instruction peut donner de curieuses erreurs en raison des règles de priorité.
  • Il est moins susceptible de créer accidentellement un produit cartésien lors de l'utilisation de la syntaxe JOIN en raison d'une clause de jointure oubliée, car les clauses de jointure sont écrites à côté des jointures et il est facile de voir s'il en manque.
104
Mark Byers

Ce sont tous équivalents et égaux à, CROSS JOIN.

Il existe certaines différences entre l’utilisation de la virgule et de la syntaxe [INNER | CROSS] JOIN, ce qui peut être important pour joindre des tables supplémentaires. Presque tout ce que vous avez besoin de savoir est décrit ici dans MySQL JOIN documentation .

0
Mchl