Qual è la differenza tra LEFT JOIN
e LEFT OUTER JOIN
?
Come da documentazione: FROM (Transact-SQL) :
::= [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ ] ] JOIN
La parola chiave OUTER
è contrassegnata come facoltativa (racchiusa tra parentesi quadre) e ciò significa in questo caso che se lo specifichi o meno non fa alcuna differenza. Nota che anche se gli altri elementi della clausola join sono contrassegnati come facoltativi, lasciarli fuori ovviamente farà la differenza.
Ad esempio, l’intera parte tipo della clausola JOIN
è facoltativa, nel qual caso il valore predefinito è INNER
se si specifica solo JOIN
. In altre parole, questo è legale:
SELECT * FROM A JOIN B ON AX = BY
Ecco un elenco di syntax equivalenti:
A LEFT JOIN BA LEFT OUTER JOIN B A RIGHT JOIN BA RIGHT OUTER JOIN B A FULL JOIN BA FULL OUTER JOIN B A INNER JOIN BA JOIN B
Dai anche un’occhiata alla risposta che ho lasciato su quest’altra domanda SO: SQL left join vs multiple tables on FROM line? .
Per rispondere alla tua domanda non c’è differenza tra LEFT JOIN e LEFT OUTER JOIN, sono esattamente gli stessi che hanno detto …
INNER JOIN – recupera i dati se presenti in entrambe le tabelle.
OUTER JOIN sono di 3 tipi:
LEFT OUTER JOIN
– recupera i dati se presenti nella tabella sinistra. RIGHT OUTER JOIN
– recupera i dati se presenti nella tabella giusta. FULL OUTER JOIN
– recupera i dati se presenti in una delle due tabelle. CROSS JOIN , come suggerisce il nome, fa [n X m]
che unisce tutto a tutto.
Simile allo scenario in cui vengono semplicemente elencate le tabelle per l’unione (nella clausola FROM
dell’istruzione SELECT
), utilizzando le virgole per separarle.
Punti da notare:
JOIN
per impostazione predefinita si tratta di INNER JOIN
. OUTER
deve essere LEFT
| RIGHT
| FULL
non puoi semplicemente dire OUTER JOIN
. OUTER
e dire solo LEFT JOIN
o RIGHT JOIN
o FULL JOIN
. Per coloro che desiderano visualizzarli in un modo migliore, andare a questo link: Una spiegazione visiva dei join SQL
Qual è la differenza tra join sinistro e join esterno sinistro?
Niente LEFT JOIN
e LEFT OUTER JOIN
sono equivalenti.
Maggiori informazioni su Rappresentazione visuale di join SQL
Sono un DBA PostgreSQL, per quanto ho potuto capire la differenza tra differenza di outer outer o non outer è un argomento che ha una notevole discussione su Internet. Fino ad oggi non ho mai visto una differenza tra questi due; Così sono andato oltre e cerco di trovare la differenza tra quelli. Alla fine ho letto tutta la documentazione a riguardo e ho trovato la risposta per questo,
Quindi se guardi la documentazione (almeno in PostgreSQL) puoi trovare questa frase:
“Le parole INNER
e OUTER
sono opzionali in tutte le forms, INNER
è l’impostazione predefinita, LEFT
, RIGHT
e FULL
implicano un join esterno.”
In altre parole,
LEFT JOIN
e LEFT OUTER JOIN
SONO LO STESSO
RIGHT JOIN
e RIGHT OUTER JOIN
SONO LO STESSO
Spero che possa essere un contributo per coloro che stanno ancora cercando di trovare la risposta.
Niente da dire a parole accanto a questo:
Left Join
e Left Outer Join
sono la stessa cosa . Il primo è la scorciatoia per quest’ultimo. Lo stesso si può dire della relazione Right Join
Right Outer Join
e Right Outer Join
. La dimostrazione illustrerà l’uguaglianza. Esempi di lavoro di ogni query sono stati forniti tramite SQL Fiddle . Questo strumento consentirà mani sulla manipolazione della query.
Dato
Join sinistro e Join esterno sinistro
risultati
Join destro e Join esterno destro
risultati
Trovo più facile pensare a Joins nel seguente ordine:
Finché non ho capito questo (relativamente) semplice modello, JOINS era sempre un po ‘più un’arte nera. Ora hanno perfettamente senso.
Spero che questo aiuti più di quanto confonda.
Perché LEFT / RIGHT e LEFT OUTER / RIGHT ESTERNE sono le stesse? Spieghiamo perché questo vocabolario. Comprendi che i join LEFT e RIGHT sono casi specifici del join OUTER, e quindi non potrebbero essere nient’altro che ESCLUSIVAMENTE A SINISTRA / ESTERNO DESTRA. Il join OUTER viene anche chiamato FULL OUTER anziché i join LEFT e RIGHT che sono i risultati PARTIAL del join OUTER. Infatti:
Table A | Table B Table A | Table B Table A | Table B Table A | Table B 1 | 5 1 | 1 1 | 1 1 | 1 2 | 1 2 | 2 2 | 2 2 | 2 3 | 6 3 | null 3 | null - | - 4 | 2 4 | null 4 | null - | - null | 5 - | - null | 5 null | 6 - | - null | 6 OUTER JOIN (FULL) LEFT OUTER (partial) RIGHT OUTER (partial)
Ora è chiaro il motivo per cui tali operazioni hanno alias, così come è chiaro che esistono solo 3 casi: INTERNO, ESTERNO, CROCE. Con due sottocasi per OUTER. Il vocabolario, il modo in cui gli insegnanti spiegano questo, così come alcune risposte sopra, spesso fanno sembrare che ci siano molti tipi diversi di join. Ma in realtà è molto semplice.
Esistono principalmente tre tipi di JOIN
Esterno: sono di tre tipi
Cross Join: unisce tutto a tutto
Per rispondere alla tua domanda
In Sql Server, la syntax di join OUTER è facoltativa
È menzionato nell’articolo di msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
Quindi la seguente lista mostra unire syntax equivalenti con e senza OUTER
LEFT OUTER JOIN => LEFT JOIN RIGT OUTER JOIN => RIGHT JOIN FULL OUTER JOIN => FULL JOIN
Altre syntax equivalenti
INNER JOIN => JOIN CROSS JOIN => ,
Consiglia fortemente DotNet Mob Artice: Join in Sql Server
Lo zucchero sintattico, rende più evidente al lettore occasionale che l’unione non è interiore.
C) Join esterno:
There are three type of outer join 1) Left Outer Join = Left Join 2) Right Outer Join = Right Join 3) Full Outer Join = Full Join
Spero che sarebbe d’aiuto.
LEFT JOIN
esegue un join a partire dalla prima tabella (più a sinistra) e quindi da qualsiasi altro record di tabella corrispondente (più a destra).
LEFT JOIN
eLEFT OUTER JOIN
sono gli stessi.
Secondo DoFactory
In, sia il join sinistro che il join esterno sinistro eseguono le stesse operazioni.
Fondamentalmente il join sinistro fornisce tutti i record dalla tabella 1 e solo i record corrispondenti dalla tabella 2.
Non fornisce i record ineguagliati dalla tabella 2.
So che questo è vecchio, tuttavia volevo mettere i miei due centesimi. Capisco che il LEFT JOIN
dovrebbe essere lo stesso di LEFT OUTER JOIN
ma nella mia esperienza ho visto un LEFT JOIN
tirare indietro diversi risultati rispetto a un LEFT OUTER JOIN
così io hanno iniziato a usare la parola chiave OUTER
per essere più specifici e corretti. Le righe che avrebbero dovuto tornare in un LEFT JOIN
non erano dove, come quando LEFT OUTER JOIN
lo facevano. Stavo cercando di spiegarlo a un collega quando non era in grado di ottenere le righe di cui aveva bisogno, così ho deciso di fare la differenza su Google in modo da avere una sorta di supporto per mostrarlo. Questo potrebbe essere una cosa specifica di SQL Server a cui non sono sicuro. Direi che, in buona pratica, sarebbe più consigliabile dichiarare esplicitamente che vuoi che si verifichi un join esterno. Solo la mia opinione.