Différence entre la jointure interne et la jointure externe
ces deux jointures me donneront 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 a-t-il une différence entre les énoncés relatifs à la performance et les autres énoncés?
est-il différent entre différentes implémentations SQL?
7 réponses
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 (i.e. LEFT
ou RIGHT
ou CROSS
) inclus dans elle.
, Juste en tapant JOIN
effectue une INNER JOIN
par défaut.
Pour tous les autres, une image vaut parfois plus que des centaines de mots:
image courtoisie de Code Project .
INNER JOIN est le par défaut si vous ne spécifiez pas le type lorsque vous utilisez le mot JOIN.
vous pouvez également utiliser la jointure extérieure gauche ou la jointure extérieure droite, dans ce cas le mot extérieur est facultatif, ou vous pouvez spécifier CROSS JOIN.
ou
Pour une jointure interne, la syntaxe est:
sélectionner ...
De la table a
[Intérieur] joindre la table B(en d'autres termes, le mot - clé" intérieur "est facultatif - les résultats sont les mêmes avec ou sans elle)
de même avec OUTER JOINs
, le mot "OUTER"
est facultatif. C'est le mot-clé LEFT
ou RIGHT
qui fait du JOIN
un "OUTER" JOIN
.
Cependant pour une raison quelconque j'utilise toujours "OUTER"
comme dans LEFT OUTER JOIN
et jamais LEFT JOIN
, mais je n'utilise jamais INNER JOIN
, mais plutôt j'utilise juste "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
est-il différent entre différentes implémentations SQL?
Oui, Microsoft Access ne permet pas seulement de join
. Elle nécessite inner join
.
comme l'indiquent déjà les autres réponses, il n'y a pas de différence dans votre exemple.
la grammaire pertinente est documentée ici
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
montrant que tous sont optionnels. La page précise en outre que
INNER
spécifie que toutes les paires de lignes correspondantes sont retournées. Jeter inégalée les lignes des deux tables. Lorsqu'aucun type de jointure n'est spécifié, ce est la valeur par défaut .
la grammaire indique aussi qu'il y a une fois où le INNER
est requis cependant. Lors de la spécification d'un indice 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;