SQLShack (Italiano)

Questo articolo fornirà una panoramica completa, con esempi del join esterno SQL, incluso il join esterno completo, destro e sinistro e copre l’unione tra i join esterni sinistro e destro SQL.

È essenziale comprendere il processo per ottenere i dati dal multiplo tavoli. Un principiante potrebbe non avere l’idea dei join in SQL Server. In questo suggerimento, faremo una panoramica dei join SQL, impareremo SQL OUTER JOIN insieme alla sua sintassi, esempi e casi d’uso.

In un sistema di database relazionale, è buona norma seguire i principi di normalizzazione, in cui, fondamentalmente, suddividiamo le tabelle grandi in tabelle più piccole. In un’istruzione select, possiamo recuperare i dati da queste tabelle utilizzando i join. Possiamo unire le tabelle e ottenere i campi richiesti da queste tabelle nel set di risultati. Queste tabelle dovrebbero avere un campo comune per relazionarsi tra loro. Potresti trovare dati suddivisi su più database e talvolta è anche una struttura molto complessa. Con Joins, possiamo unire i dati di più tabelle, database in modo intuitivo e rappresentare questi dati nell’applicazione.

Possiamo rappresentare un SQL JOIN utilizzando la seguente immagine

Possiamo molti tipi di join SQL in SQL Server. Nell’immagine seguente, puoi vedere le categorie di SQL Joins

Esploriamo SQL Outer Join in dettaglio nella prossima sezione.

Panoramica di SQL OUTER JOIN

Usiamo SQL OUTER JOIN per abbinare le righe tra le tabelle. Potremmo voler ottenere righe di corrispondenza insieme a righe senza corrispondenza anche da una o entrambe le tabelle. Abbiamo i seguenti tre tipi di SQL OUTER JOINS.

  1. SQL Full Outer Join
  2. SQL Left Outer Join
  3. SQL Right Outer Join

Esploriamo ogni SQL Outer Join con esempi.

SQL Full Outer Join

In SQL Full Outer Join, tutte le righe di entrambe le tabelle sono incluse . Se ci sono righe senza corrispondenza, mostra valori NULL per esse.

Possiamo capire in modo efficiente utilizzando esempi. Creiamo una tabella di esempio e inseriamo i dati al suo interno.

Puoi fare riferimento al seguente modello di dati di entrambe le tabelle.

Inserisci i dati nella tabella Employee con il seguente script.

Inserisci i dati nella tabella Reparti

Possiamo rappresentare una relazione logica tra due tabelle utilizzando un diagramma di Venn. In un diagramma di Venn contiene più cerchi sovrapposti e ogni cerchio rappresenta un’entità o una tabella. L’area comune o l’area di sovrapposizione nel diagramma di Venn rappresenta i valori comuni tra le due tabelle.

Ad esempio, nello screenshot seguente, abbiamo due cerchi sovrapposti. Ogni cerchio ha inviato di nuovo un tavolo (dipendente e dipartimenti). Comprendiamo il FULL Outer Join usando il seguente esempio.

Abbiamo un campo comune (EmpID) in entrambe le tabelle; quindi, possiamo unire la tabella con questa colonna. Nella seguente query, abbiamo definito la FULL OUTER JOIN tra i reparti e la tabella Employee nella colonna EMPID di entrambe le tabelle.

1
2
3

SELEZIONA *
DA Employee
COMPLETO ESTERNO UNISCITI A REPARTI ON Employee.EmpID = Departments.EmpID;

SQL Full Outer Join fornisce le seguenti righe in un output

  • Righe corrispondenti tra entrambe le tabelle
  • Righe senza corrispondenza da entrambe le tabelle (valori NULL )

Eseguiamo questa query per restituire l’output della query Full Outer Join. Otteniamo il seguente output.

Possiamo vedere anche alcuni record con valori NULL. Comprendiamolo in un modo migliore utilizzando un diagramma di Venn.

Nello screenshot seguente, puoi vedere le seguenti informazioni

  • EmpID 1, 2,3,4,5 , 6,10 esiste sia nella tabella dei dipendenti che in quella dei dipartimenti. Nell’output della query Full Outer Join, otteniamo tutte queste righe con i dati di entrambe le tabelle
  • EmpID 7, 8, 9 esiste nella tabella Employee ma non nella tabella Reparti. Non include righe corrispondenti nella tabella dei reparti; perciò; otteniamo valori NULL per quei record

Ora, a scopo dimostrativo, inseriamo un altro record nelle tabelle dei dipartimenti . In questa query, inseriamo EmpID 11 che non esiste nella tabella Employee.

Riesegui la query SQL Full Outer Join. Nell’immagine seguente, ottieni una riga aggiuntiva con valori NULL. Non abbiamo alcuna riga corrispondente per EmpID 11 nella tabella dei dipendenti.Per questo motivo, otteniamo valori NULL per esso nell’output.

Come riepilogo, possiamo rappresentare SQL Full Outer Join utilizzando il seguente diagramma di Venn. Otteniamo ciò che è rappresentato nell’area evidenziata nell’output di Full Outer Join.

SQL FULL OUTER JOIN e clausola WHERE

Possiamo aggiungere una clausola WHERE con SQL FULL OUTER JOIN per ottenere righe senza dati corrispondenti tra le due tabelle Join.

Nella seguente query, aggiungiamo una clausola where a mostra solo i record con valori NULL.

1
2
3
4
5

SELEZIONA *
DA Dipendente
FULL OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID
WHERE Employee.EmpID È NULL
OR Departments.EmpID È NULL;

Esegui questo comando e visualizza l’output. Restituisce solo righe che non corrispondono né nella tabella Dipendenti né nella tabella Reparti.

SQL LEFT OUTER JOIN

In un SQL Left Outer Join, otteniamo le seguenti righe nel nostro output.

  • Fornisce l’output della riga corrispondente tra entrambe le tabelle
  • Se nessun record corrisponde dalla tabella di sinistra, mostra anche quei record con valori NULL

Esegui il seguente codice per restituire l’output SQL LEFT OUTER JOIN

1
2
3

SELEZIONA *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Nell’immagine seguente, puoi vedere che abbiamo valori NULL per EmpID 7,8 e 9. Questi EmpID non esistono nella parte destra Tabella di reparto.

Dobbiamo notare la posizione del posizionamento della tabella nell’istruzione Join. Al momento, abbiamo una tabella dei dipendenti sul lato sinistro e una tabella dei dipartimenti sul lato destro.

Riscriviamo la query e scambiamo la posizione delle tabelle nella query. In questa query, abbiamo la tabella Department nella posizione sinistra, quindi il Left Outer Join dovrebbe controllare i valori per questa tabella e restituire un valore NULL in caso di mancata corrispondenza.

Nello screenshot seguente, puoi vedere che solo un valore NULL per EmpID 11. È perché EmpID 11 non è disponibile nella tabella Employee.

As in sintesi, possiamo rappresentare SQL Left Outer Join utilizzando il seguente diagramma di Venn. Otteniamo l’area evidenziata nell’output di SQL Left Outer Join.

SQL Right OUTER JOIN

In SQL Right Outer Join, otteniamo le seguenti righe nel nostro output.

  • Fornisce l’output della riga corrispondente tra entrambe le tabelle
  • Se nessun record corrisponde da la tabella a destra, mostra anche quei record con valori NULL

Esegui la seguente query per ottenere l’output di Right Outer Join

1
2
3

SELEZIONA *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Nell’immagine seguente, puoi vedere che abbiamo tutte le righe corrispondenti insieme a una riga con valori NULL. La riga del valore null ha EmpID 11 perché non esiste nella tabella Employee. Puoi anche notare che la posizione della tabella Reparto è nella posizione corretta in Join. Per questo motivo, non otteniamo valori dalla tabella Employee (posizione a sinistra) che non corrispondono alla tabella Department (lato destro).

Come evidenziato in precedenza, la posizione della tabella è importante nell’istruzione JOIN. Se cambiamo le posizioni della tabella, otteniamo un output diverso. Nella seguente query, abbiamo la tabella dei dipartimenti (a sinistra) e la tabella dei dipendenti (a destra).

1
2
3
4

SELEZIONA *
DA Dipartimenti
DESTRA ESTERNO ISCRIVITI Dipendente ON Dipartimenti.EmpID = Employee.EmpID

Puoi notare la differenza in Right Outer Join dopo aver scambiato le posizioni delle tabelle nella query sopra.

Come riepilogo, possiamo rappresentare SQL Right Outer Join utilizzando il seguente diagramma di Venn. Otteniamo un’area evidenziata nell’output di SQL Right Outer Join.

L’unione tra SQL Left Outer Join e SQL Right Outer Join

Negli esempi precedenti, abbiamo esplorato SQL Left Outer Join e SQL Right Outer Join con diversi esempi. Possiamo fare un’unione del risultato sia di SQL Left Outer Join che di SQL Right Outer Join. Fornisce l’output di SQL Full Outer Join.

Esegui la seguente query in alternativa a SQL Full Outer Join.

1
2
3
4
5
6
7

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID
UNION ALL
SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Nell’output seguente, otteniamo tutti record di corrispondenza, record di non corrispondenza dalla tabella di sinistra e record di non corrispondenza dalla tabella di destra. È simile a un output di SQL Full Outer Join.

Conclusione

In questo articolo, abbiamo esplorato SQL Outer Join e i suoi tipi insieme ad esempi. Spero che tu abbia trovato utile questo articolo. Non esitare a fornire feedback nei commenti di seguito.

  • Autore
  • Post recenti
In qualità di Trainer certificato MCSA e Microsoft Certified a Gurgaon, India, con 13 anni di esperienza, Rajendra lavora per una serie di grandi aziende concentrandosi su ottimizzazione delle prestazioni, monitoraggio, alta disponibilità e strategie e implementazione di ripristino di emergenza. È autore di centinaia di articoli autorevoli su SQL Server, Azure, MySQL, Linux, Power BI, Performance tuning, AWS / Amazon RDS, Git e tecnologie correlate che sono stati visualizzati da oltre 10 milioni di lettori fino ad oggi.
È l’autore di una delle più grandi raccolte online gratuite di articoli su un singolo argomento, con la sua serie di 50 parti sui gruppi di disponibilità Always On di SQL Server. Sulla base del suo contributo alla comunità di SQL Server, è stato riconosciuto con vari premi tra cui il prestigioso “Miglior autore dell’anno” ininterrottamente nel 2020 e 2021 a SQLShack.
Raj è sempre interessato a nuove sfide, quindi se hai bisogno di consulenza aiuto su qualsiasi argomento trattato nei suoi scritti, può essere raggiunto a [email protected]
Visualizza tutti i post di Rajendra Gupta

Ultimi post di Rajendra Gupta (vedi tutti)
  • Timeout della sessione in SQL Server Always On Availability Gruppi – 8 febbraio 2021
  • Esecuzione di aggiornamenti della versione minore e principale per AWS RDS SQL Server – 29 gennaio 2021
  • Distribuzione di istanze PostgreSQL di AWS RDS – 27 gennaio 2021

Write a Comment

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *