LEFT JOIN vs. LEFT OUTER JOIN in SQL Server

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? .

inserisci la descrizione dell'immagine qui

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.

Maggiori informazioni su Rappresentazione visuale di join SQL

Rappresentazione visiva 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: inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

Join sinistro e Join esterno sinistro

inserisci la descrizione dell'immagine qui

risultati

inserisci la descrizione dell'immagine qui


Join destro e Join esterno destro

inserisci la descrizione dell'immagine qui

risultati

inserisci la descrizione dell'immagine qui

Trovo più facile pensare a Joins nel seguente ordine:

  • CROSS JOIN – un prodotto cartesiano di entrambe le tabelle. TUTTI i join iniziano qui
  • INNER JOIN – un CROSS JOIN con un filtro aggiunto.
  • OUTER JOIN – un JOINT INTERNO con elementi mancanti (dalla tabella SINISTRA o DESTRA) aggiunto in seguito.

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

  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

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 inserisci la descrizione dell'immagine qui

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

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.

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 e LEFT 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.