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?

798
demandé sur Palec 2009-02-19 17:47:29
la source

7 ответов

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.

871
répondu palehorse 2014-12-01 19:35:04
la source

, 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:

Enter image description here

image courtoisie de Code Project .


661
répondu Damian Drygiel 2018-05-19 13:59:18
la source

Non, il n'y a pas de différence, pur sucre syntaxique .

209
répondu Quassnoi 2009-02-19 17:48:41
la source

INNER JOIN = JOIN :

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)

115
répondu net_prog 2017-03-30 13:41:27
la source

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
44
répondu Kristen 2018-05-19 13:57:15
la source

est-il différent entre différentes implémentations SQL?

Oui, Microsoft Access ne permet pas seulement de join . Elle nécessite inner join .

41
répondu Michał Powaga 2018-05-19 13:57:53
la source

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;

enter image description here

21
répondu Martin Smith 2015-08-02 19:38:33
la source

Autres questions sur sql sql-server join inner-join