Question 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

Y a-t-il une différence entre les énoncés en performance ou autre?

Est-ce qu'il diffère entre différentes implémentations SQL?


772
2018-02-19 14:47


origine


Réponses:


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


850
2018-02-19 14:50



Juste en tapant JOIN effectue un INNER JOIN par défaut.

Pour tous les autres, une image vaut parfois plus que des centaines de mots:

Enter image description here

Image avec l'aimable autorisation de Projet de code.



644
2017-10-28 22:56



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


207
2018-02-19 14:48



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 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 la suivante:

SELECT ...
  DE LA TABLEA
  [INNER] JOIN TableB

(en d'autres termes, le mot clé "INNER" est optionnel - les résultats sont les mêmes   avec ou sans)


115
2018-02-28 08:23



De même avec OUTER JOINs, le mot "OUTER" est optionnel. C'est le LEFT ou RIGHT mot-clé qui rend le JOIN un "OUTER" JOIN.

Cependant, pour une raison que j'utilise toujours "OUTER" un péché LEFT OUTER JOIN et jamais LEFT JOINmais je n'utilise jamais INNER JOINmais 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
2018-02-19 15:09



Est-ce qu'il diffère entre différentes implémentations SQL?

Oui, Microsoft Access ne permet pas seulement join. Cela demande inner join.


40
2018-05-15 13:33



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

Le peu de grammaire pertinente est documenté ici

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

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

INNER Indique que toutes les paires de lignes correspondantes sont renvoyées. Rejette   lignes sans correspondance des deux tables. Quand aucun type de jointure n'est spécifié, ceci   est le défaut.

La grammaire indique également qu'il y a une fois où le INNER  est nécessaire cependant. 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


21
2017-08-02 16:38