Qual è la differenza tra LEFT JOIN
e LEFT OUTER JOIN
?
Qual è la differenza tra LEFT JOIN
e LEFT OUTER JOIN
?
Risposte:
Secondo la documentazione: FROM (Transact-SQL) :
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
La parola chiave OUTER
è contrassegnata come facoltativa (racchiusa tra parentesi quadre). In questo caso specifico, se si specifica OUTER
o meno non fa alcuna differenza. Si noti che mentre gli altri elementi del join clausola è anche contrassegnato come optional, lasciando li fuori farà fare la differenza.
Ad esempio, l'intera parte del tipo della JOIN
clausola è facoltativa, nel qual caso l'impostazione predefinita è INNER
se si specifica semplicemente JOIN
. In altre parole, questo è legale:
SELECT *
FROM A JOIN B ON A.X = B.Y
Ecco un elenco di sintassi equivalenti:
A LEFT JOIN B A LEFT OUTER JOIN B
A RIGHT JOIN B A RIGHT OUTER JOIN B
A FULL JOIN B A FULL OUTER JOIN B
A INNER JOIN B A JOIN B
Dai anche un'occhiata alla risposta che ho lasciato su quest'altra domanda SO: SQL lasciato join vs più tabelle sulla linea FROM? .
INNER JOIN
a destra e proprio JOIN
a sinistra nell'elenco di equivalenti?
JOIN
s.
Per rispondere alla tua domanda non c'è differenza tra LEFT JOIN e LEFT OUTER JOIN, sono esattamente gli stessi che dicevano ...
INNER JOIN : recupera i dati se presenti in entrambe le tabelle.
I JOU ESTERNI sono di 3 tipi:
LEFT OUTER JOIN
- recupera i dati se presenti nella tabella di 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 elenciamo semplicemente le tabelle per l'unione (nella FROM
clausola SELECT
dell'istruzione), usando le virgole per separarle.
Punti da notare:
JOIN
per impostazione predefinita è a INNER JOIN
.OUTER
join deve essere LEFT
| RIGHT
| FULL
non puoi semplicemente dire OUTER JOIN
.OUTER
parola chiave e semplicemente dire LEFT JOIN
o RIGHT JOIN
o FULL JOIN
.Per coloro che desiderano visualizzarli in modo migliore, visitare questo link: Una spiegazione visiva dei join SQL
CROSS JOIN
lo stesso di FULL JOIN
?
Cross Join
e Full Outer Join
... in qualche modo sembra simile.
Qual è la differenza tra join sinistro e join esterno sinistro?
Niente . LEFT JOIN
e LEFT OUTER JOIN
sono equivalenti.
OUTER
opzione è facoltativa.
Sono un DBA PostgreSQL, per quanto ho potuto capire la differenza tra la differenza dei join esterni o esterni è un argomento che ha una discussione considerevole su Internet. Fino ad oggi non ho mai visto una differenza tra quei due; Quindi sono andato oltre e provo a 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:
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.
Left Join
e Left Outer Join
sono la stessa cosa . Il primo è la scorciatoia per il secondo. Lo stesso si può dire della relazione Right Join
e Right Outer Join
. La dimostrazione illustrerà l'uguaglianza. Esempi di lavoro di ciascuna query sono stati forniti tramite SQL Fiddle . Questo strumento consentirà di manipolare direttamente la query.
Dato
Join sinistro e Join esterno sinistro
risultati
Unione destra e Unione esterna destra
risultati
Trovo più facile pensare a Joins nel seguente ordine:
Fino a quando non ho capito questo modello (relativamente) semplice, JOINS era sempre un po 'più di un'arte nera. Ora hanno perfettamente senso.
Spero che questo aiuti più di quanto confonda.
Perché LEFT / RIGHT e LEFT OUTER / RIGHT OUTER sono uguali? Spieghiamo perché questo vocabolario. Comprendere che i join SINISTRA e DESTRA sono casi specifici del join ESTERNO, e quindi non potrebbero essere altro che ESTERNO SINISTRA / ESTERNO DESTRA. Il join OUTER è anche chiamato FULL OUTER anziché i join LEFT e RIGHT che sono i risultati PARZIALI 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 perché tali operazioni hanno alias, così come è chiaro che esistono solo 3 casi: INTERNO, ESTERNO, CROSS. Con due sotto-casi per ESTERNO. Il vocabolario, il modo in cui gli insegnanti lo spiegano, così come alcune risposte sopra, spesso fanno sembrare che ci siano molti tipi diversi di join. Ma in realtà è molto semplice.
JOIN
implica INNER JOIN
" si adatta al tuo ragionamento per il vocabolario di join esterno?
Per rispondere alla tua domanda
In SQL Server si unisce la sintassi OUTER è facoltativa
È menzionato nell'articolo di msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
Quindi il seguente elenco mostra sintassi equivalenti di join con e senza OUTER
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Altre sintassi equivalenti
INNER JOIN => JOIN
CROSS JOIN => ,
Consiglio vivamente Dotnet Mob Artice: si unisce al server SQL
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 possa essere d'aiuto.
Esistono principalmente tre tipi di JOIN
Esterno: sono di tre tipi
Cross Join: unisce tutto a tutto
Lo zucchero sintattico, rende più ovvio per il lettore occasionale che l'unione non è interiore.
Proprio nel contesto di questa domanda, voglio pubblicare anche i 2 operatori "APPLICA":
ISCRIVITI :
INNER JOIN = JOIN
ISCRIVITI ESTERNO
LEFT OUTER JOIN = LEFT JOIN
GIUSTO ESTERNO UNISCI = DESTRA UNISCITI
FULL OUTER JOIN = FULL JOIN
CROSS JOIN
SELF-JOIN : Questo non è esattamente un tipo separato di join. Fondamentalmente si tratta di unire una tabella a se stessa utilizzando uno dei join precedenti. Ma ho sentito che vale la pena menzionare nel contesto delle discussioni JOIN poiché sentirai questo termine da molti nella comunità degli sviluppatori SQL.
APPLICARE :
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/
Esempio di vita reale, quando utilizzare OUTER / CROSS APPLY in SQL
Trovo l'operatore APPLY molto utile in quanto offrono prestazioni migliori rispetto a dover eseguire lo stesso calcolo in una subquery. Sostituiscono inoltre molte funzioni analitiche nelle versioni precedenti di SQL Server. Questo è il motivo per cui credo che dopo essersi sentito a mio agio con JOINS, uno sviluppatore SQL dovrebbe provare ad apprendere successivamente gli operatori APPLY.
OUTER
parola chiave è facoltativa