Différence entre JOIN et INNER JOIN
-
05-09-2019 - |
Question
Ces deux jointures me donnera les mêmes résultats:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
vs
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
Y at-il une différence entre les déclarations de performance ou autrement?
-t-il entre les différentes implémentations diffèrent SQL?
La solution
Ils sont fonctionnellement équivalents, mais INNER JOIN
peut être un peu plus clair à lire, surtout si la requête a d'autres types de jointure (à savoir LEFT
ou RIGHT
ou CROSS
) inclure.
Autres conseils
Non, il n'y a pas de différence, pur sucre syntaxique .
jointure = join
INNER JOIN est par défaut si vous ne spécifiez pas le type lorsque vous utilisez le mot JOIN.
Vous pouvez également utiliser LEFT OUTER JOIN ou RIGHT OUTER JOIN, auquel cas le mot OUTER est facultatif, ou vous pouvez spécifier CROSS JOIN.
ou
Pour une jointure interne, la syntaxe est:
SELECT ...
DE TableA
[INNER] JOIN TableB(en d'autres termes, le mot-clé "INNER" est option - résultats sont les mêmes avec ou sans)
De même avec OUTER JOINs
, le mot "OUTER"
est facultative. Il est le mot-clé LEFT
ou RIGHT
qui fait la JOIN
un "OUTER" JOIN
.
Cependant, pour une raison que je l'utilise toujours "OUTER"
comme dans LEFT OUTER JOIN
et jamais LEFT JOIN
, mais je ne l'utilise INNER JOIN
, mais je viens d'utiliser "JOIN"
:
SELECT ColA, ColB, ...
FROM MyTable AS T1
JOIN MyOtherTable AS T2
ON T2.ID = T1.ID
LEFT OUTER JOIN MyOptionalTable AS T3
ON T3.ID = T1.ID
-t-il entre les différentes implémentations diffèrent SQL?
Oui, Microsoft Access ne permet pas seulement join
. Il nécessite inner join
.
Comme les autres réponses indiquent déjà il n'y a pas de différence dans votre exemple.
Le bit correspondant de la grammaire est documenté ici
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Affichage que tous sont facultatifs. La page précise en outre que
Spécifie
INNER
toutes les paires de lignes sont renvoyées. Discards lignes inégalés des deux tables. Si aucun type de jointure est spécifié, cette est la valeur par défaut .
La grammaire fait également indiquer qu'il ya un moment où le INNER
est si nécessaire. Lorsque vous spécifiez un indicateur de jointure.
Voir l'exemple ci-dessous
CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);
SELECT *
FROM T1
LOOP JOIN T2
ON X = Y;
SELECT *
FROM T1
INNER LOOP JOIN T2
ON X = Y;