Differenza tra JOIN e INNER JOIN
-
05-09-2019 - |
Domanda
Entrambi questi si unisce mi darà gli stessi risultati:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
vs
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
C'è qualche differenza tra le dichiarazioni in termini di prestazioni o di altro tipo?
si differenzia tra le diverse implementazioni di SQL?
Soluzione
Sono funzionalmente equivalenti, ma INNER JOIN
possono essere un po 'più chiaro da leggere, soprattutto se la query ha altri tipi di join (cioè LEFT
o RIGHT
o CROSS
) incluso in esso.
Altri suggerimenti
No, non c'è alcuna differenza, pura zucchero sintattico .
INNER JOIN = ENTRA
INNER JOIN è il default se non si specifica il tipo quando si utilizza la parola JOIN.
È inoltre possibile utilizzare LEFT OUTER JOIN o join esterno destro, nel qual caso la parola esterna è opzionale, oppure è possibile specificare CROSS JOIN.
o
Per un inner join, la sintassi è:
SELECT ...
DA TableA
[INNER] JOIN TableB(in altre parole, la parola chiave "interiore" è opzionale - Risultati sono gli stessi con o senza di essa)
Allo stesso modo con OUTER JOINs
, la parola "OUTER"
è opzionale. E 'la parola chiave LEFT
o RIGHT
che rende il JOIN
un "OUTER" JOIN
.
Tuttavia, per qualche motivo io uso sempre "OUTER"
come in LEFT OUTER JOIN
e mai LEFT JOIN
, ma non ho mai utilizzare INNER JOIN
, ma mi basta usare "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
si differenzia tra le diverse implementazioni di SQL?
Sì, Microsoft Access non consente solo join
. Richiede inner join
.
Come le altre risposte già stato non v'è alcuna differenza nel tuo esempio.
Il bit rilevante della grammatica è documentato qui
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
che mostra che tutti sono opzionali. La pagina inoltre chiarisce che
INNER
Specifica tutte le coppie di righe vengono restituite. rigetti le righe non corrispondenti di entrambe le tabelle. Quando nessun tipo di join è specificato, questo è il default .
La grammatica fa anche indicare che c'è un tempo in cui la INNER
è necessario però. Quando si specifica un hint di join.
Si veda l'esempio seguente
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;