web-dev-qa-db-fra.com

Comment utiliser mysql JOIN sans condition ON?

Est-il possible d'écrire une requête de jointure sans l'instruction ON? et comment ces jointures diffèrent-elles LEFT JOIN, RIGHT JOIN travaux.

82
Alexander T.

MySQL documentation couvre ce sujet.

Voici un résumé. Lorsque vous utilisez join ou inner join, la condition on est optionnelle. Ceci est différent de la norme ANSI et de presque toutes les autres bases de données. L'effet est un cross join. De même, vous pouvez utiliser une clause on avec cross join, qui diffère également du SQL standard.

Une jointure croisée crée un produit cartésien, c'est-à-dire toute combinaison possible d'une ligne du premier tableau et d'une ligne du second. Le croisement pour une table à trois lignes ('a', 'b' et 'c') et une table à quatre lignes (disons 1, 2, 3, 4) aurait 12 lignes.

En pratique, si vous voulez faire une jointure croisée, utilisez cross join:

from A cross join B

est beaucoup mieux que:

from A, B

et:

from A join B -- with no on clause

La clause on est requise pour une jointure externe droite ou gauche. La discussion ne les concerne donc pas.

Si vous devez comprendre les différents types de jointure, vous devez étudier certaines bases de données relationnelles. Stackoverflow n'est pas un endroit approprié pour ce niveau de discussion.

119
Gordon Linoff

Voir des exemples dans http://www.sitepoint.com/understanding-sql-joins-mysql-database/

Vous pouvez utiliser 'USING' au lieu de 'ON' comme dans la requête

SELECT * FROM table1 LEFT JOIN table2 USING (id);
8
Manu

Vous voudrez peut-être aussi étudier l'utilisation de UNION, qui combine plusieurs tables pour une sortie: SQL - Combine deux tables pour une sortie

1
TARKUS