web-dev-qa-db-fra.com

Différence entre JOIN et INNER JOIN

Ces deux jointures me donneront les mêmes résultats:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

contre

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

Existe-t-il une différence entre les déclarations de performance et autres?

Est-ce différent entre les différentes implémentations SQL?

908
driis

Ils sont fonctionnellement équivalents, mais INNER JOIN peut être un peu plus clair à lire, en particulier si la requête contient d'autres types de jointure (c'est-à-dire LEFT ou RIGHT ou CROSS) inclus dans la requête. .

988
palehorse

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

223
Quassnoi

INNER JOIN = JOIN

INNER JOIN est le valeur 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 Word OUTER est facultatif, ou vous pouvez spécifier CROSS JOIN.

OR

Pour une jointure interne, la syntaxe est la suivante:

SÉLECTIONNER ...
DE LA TABLEA
[INNER] JOIN TableB

(en d'autres termes, le mot clé "INNER" est facultatif - les résultats sont identiques, avec ou sans)

124
net_prog

De même avec OUTER JOINs, le mot "OUTER" est facultatif. C'est le mot-clé LEFT ou RIGHT qui fait de la 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 j'utilise plutôt "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
48
Kristen

Est-ce différent entre les différentes implémentations SQL?

Oui, Microsoft Access ne permet pas que join. Il nécessite inner join .

46
Michał Powaga

Comme le disent déjà les réponses, il n'y a pas de différence dans votre exemple.

Le bit de grammaire pertinent est documenté ici

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

Montrer que tous sont optionnels. La page précise que

INNER Spécifie que toutes les paires de lignes correspondantes sont renvoyées. Élimine les lignes sans correspondance des deux tables. Lorsqu'aucun type de jointure n'est spécifié, il s'agit du type par défaut .

La grammaire indique également qu’il est une fois où la INNER est requise . Lorsque vous spécifiez 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

24
Martin Smith