sql-server - outer - t-sql join




LEFT JOIN vs. LEFT OUTER JOIN in SQL Server (11)

Qual è la differenza tra LEFT JOIN e LEFT OUTER JOIN ?


Per rispondere alla tua domanda non c'è differenza tra LEFT JOIN e LEFT OUTER JOIN, sono esattamente gli stessi che hanno detto ...

Al livello più alto ci sono principalmente 3 tipi di join:

  1. INTERNO
  2. ESTERNO
  3. ATTRAVERSARE
  1. INNER JOIN - recupera i dati se presenti in entrambe le tabelle.

  2. OUTER JOIN sono di 3 tipi:

    1. LEFT OUTER JOIN - recupera i dati se presenti nella tabella sinistra.
    2. RIGHT OUTER JOIN - recupera i dati se presenti nella tabella giusta.
    3. FULL OUTER JOIN - recupera i dati se presenti in una delle due tabelle.
  3. 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:

  • Se si menziona semplicemente JOIN per impostazione predefinita si tratta di INNER JOIN .
  • Un join OUTER deve essere LEFT | RIGHT | FULL non puoi semplicemente dire OUTER JOIN .
  • Puoi rilasciare la parola chiave 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.


Ci sono solo 3 join:

  • A) Cross Join = Cartesian (Es: Tabella A, Tabella B)
  • B) Join interno = JOIN (Es: Tabella A Join / Inner Join Table B)
  • 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.


Come da 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) 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 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 left join vs multiple tables on FROM line? .


Esistono principalmente tre tipi di JOIN

  1. Interno: recupera i dati, presenti in entrambe le tabelle
    • Solo JOIN significa INNER JOIN
  2. Esterno: sono di tre tipi

    • LEFT OUTER - - recupera i dati presenti solo nella tabella sinistra e nelle condizioni corrispondenti
    • RIGHT OUTER - - recupera i dati presenti solo nella tabella di destra e nelle condizioni corrispondenti
    • FULL OUTER - - recupera i dati presenti una o entrambe le tabelle
    • (LEFT o RIGHT o FULL) OUTER JOIN può essere scritto senza scrivere "OUTER"
  3. Cross Join: unisce tutto a tutto


Lo zucchero sintattico, rende più evidente al lettore occasionale che l'unione non è interiore.


Niente da dire a parole accanto a questo:


Per rispondere alla tua domanda

In Sql Server, la sintassi 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 sintassi equivalenti con e senza OUTER

LEFT OUTER JOIN => LEFT JOIN
RIGT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

Altre sintassi equivalenti

INNER JOIN => JOIN
CROSS JOIN => ,

Consiglia fortemente DotNet Mob Artice: Join in Sql Server


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.


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 forme, 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.


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





outer-join