Est-il possible d'écrire une jointure interne ou une jointure externe sans spécifier la condition? La ON condition
fait-elle partie de la syntaxe de la condition de jointure?
lors de l'utilisation de la syntaxe ANSI SQL-92
, le mot key ON
fait partie de la jointure à l'exception de la cross join
car vous n'avez pas de condition pour la relation.
ex.
JOINTURE INTERNE
SELECT * FROM tableA INNER JOIN tableB on tableA.ID = tableB.ID
CROSS JOIN
SELECT * FROM tableA CROSS JOIN tableB
ON
doit être suivi après la table jointe (joint comme INNER et OUTER ) afin que vous n'ayez pas d'erreur de syntaxe. mais si vous utilisez la syntaxe ANSI SQL-89
, le mot key ON
est omis mais vous devez spécifier la relation sur la where clause
ex.
JOINTURE INTERNE
SELECT * FROM tableA, tableB WHERE tableA.ID = tableB.ID
CROSS JOIN
SELECT * FROM tableA, tableB
il est sujet à l'erreur parce que si vous oubliez la condition, il ne générera pas d'erreur de syntaxe et fera probablement la cross join
Non, vous ne devez pas spécifier ON
, vous pouvez le faire dans un WHERE
:
SELECT * FROM tableA, tableB WHERE tableA.Id = tableB.Id
mais cela est sujet à l'erreur (facile à finir avec CROSS JOIN
s) et est généralement mal vu. Voir ici pour les arguments contre.
EDIT : Pour être plus précis, vous pouvez JOIN
utilisant l'ancienne syntaxe de style ci-dessus, qui ne nécessite pas un ON
, mais si vous vous joignez explicitement en utilisant INNER | LEFT | FULL
INNER | LEFT | FULL
INNER | LEFT | FULL
etc. alors oui , ON
fait partie de la syntaxe. MSDN page avec les exigences syntaxiques précises.
Vous pouvez faire une jointure implicite sans utiliser la syntaxe de jointure:
select a.fred, b.joe from tableApple as a, tableBread as b where a.key1 = b.key1
Mais je suis assez certain sur est requirejs pour les jointures explicites. Vous obtiendrez une erreur de syntaxe incorrecte. Signification de la jointure explicite:
select a.fred, b.joe from tableApple as a left join tableBread as b on a.key1 = b.key1 where a.key1 = 'sally'