Essenziali di SQL Server: Utilizzo dei Join SQL

Nei database relazionali come SQL Server, l’istruzione SQL JOIN viene utilizzata per interrogare, collegare e recuperare dati da più tabelle in base alle relazioni di dati tra tali tabelle. È possibile utilizzare l’istruzione SQL JOIN con due o più tabelle e restituisce essenzialmente record che hanno valori corrispondenti nelle diverse tabelle. In questo tutorial, spiegherò come utilizzare i tipi di JOIN SQL più comuni, tra cui l’INNER JOIN SQL, il LEFT JOIN SQL, il RIGHT JOIN SQL e l’OUTER JOIN SQL.

SQL Joins sono una caratteristica essenziale da utilizzare quando si lavora con database relazionali. Sono principalmente eseguiti utilizzando l’istruzione SQL SELECT. È possibile saperne di più su come iniziare con l’istruzione T-SQL SELECT nel mio articolo precedente sui server SQL: Utilizzo di SQL SELECT e delle clausole WHERE e HAVING per il recupero dei dati.

Annuncio

SQL INNER JOIN

L’operazione SQL INNER JOIN crea un set di risultati combinando righe che hanno valori corrispondenti in due o più tabelle. Questa è probabilmente l’operazione di join più comunemente utilizzata in T-SQL. SQL INNER JOIN restituisce solo righe che hanno valori corrispondenti ed è utilizzato per recuperare dati che compaiono in tutte le tabelle.

Il diagramma seguente illustra come funziona un’operazione di JOIN INTERNO SQL con due tabelle.

How an SQL INNER JOIN operation works with two tables (Image credit: Petri/Michael Otey)

La sintassi per un JOIN INTERNO è piuttosto semplice. Come parte della tua istruzione SELECT, specifica le due tabelle da unire e le colonne da utilizzare per abbinare le righe.

Diamo un’occhiata più da vicino a due tabelle del database di esempio AdventureWorksLT2019. Se usiamo le tabelle SalesLT.Customer e SalesLT.SalesOrderHeader, possiamo utilizzare un JOIN INTERNO SQL per recuperare gli ordini per i clienti nella tabella SalesLT.Customer unendo le due tabelle sulla colonna CustomerID, che è una colonna comune in entrambe le tabelle.

Pubblicità

Ecco la query T-SQL che puoi usare per realizzare ciò:

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate 
FROM SalesLT.Customer c
INNER JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID

Ecco come funziona la sintassi per il JOIN INTERNO SQL:

  • Qui, puoi vedere che stiamo selezionando le colonne ‘CustomerID’, ‘FirstName’ e ‘LastName’ dalla tabella SalesLT.Customer e le colonne ‘SalesOrderID’ e ‘OrderDate’ dalla tabella SalesLT.SalesOrderHeader.
  • I ‘c’ e ‘soh’ sono alias di tabella abbreviati che eliminano la necessità di utilizzare sempre il nome completo della tabella quando si fa riferimento alle colonne.
  • Stiamo usando la parola chiave INNER JOIN per unire le due tabelle. La parola chiave ON specifica la colonna da utilizzare per la join. Qui è la colonna ‘CustomerID’.

Questa query restituirà un set di risultati che include le colonne ‘CustomerID’, ‘FirstName’, ‘LastName’, ‘SalesOrderID’ e ‘OrderDate’ per ogni cliente che ha effettuato un ordine, come puoi vedere nella seguente figura.

The result of our SQL INNER JOIN query (Image credit: Petri/Michael Otey)

SQL LEFT JOIN

L’operazione SQL LEFT OUTER JOIN creerà anche un set di risultati abbinando righe tra le nostre due tabelle precedenti. Con l’SQL LEFT JOIN, tuttavia, se non ci sono record corrispondenti dalla tabella di sinistra, mostrerà quei record con valori nulli.

Advertisement

Questo è utile quando si desidera includere tutte le righe dalla prima tabella e solo le righe corrispondenti dalla seconda tabella, anche se non c’è corrispondenza nella tabella di destra. L’SQL LEFT OUTER JOIN restituirà valori nulli nelle colonne dalla tabella di destra se non c’è corrispondenza.

Il seguente diagramma illustra come funziona un’operazione SQL LEFT OUTER JOIN con due tabelle.

How an SQL LEFT OUTER JOIN works with two tables (Image credit: Petri/Michael Otey)

La sintassi per il LEFT JOIN è anche abbastanza semplice. Come parte della SELECT dichiarazione, si specificano le due tabelle da unire, le colonne da utilizzare per abbinare le righe e la LEFT JOIN clausola.

Diamo un’occhiata più da vicino a due tabelle dalla banca dati AdventureWorksLT2019. Ad esempio, per recuperare tutti i clienti e qualsiasi ordine che hanno, è possibile utilizzare le tabelle SalesLT.Customer e SalesLT.SalesOrderHeader e eseguire un LEFT JOIN come puoi vedere nella seguente lista:

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate
FROM SalesLT.Customer c 
LEFT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
  • In questo esempio, stiamo selezionando le colonne ‘CustomerID’, ‘FirstName’, ‘LastName’, ‘SalesOrderID’ e ‘OrderDate’ dalle tabelle SalesLT.Customer e SalesLT.SalesOrderHeader.
  • Stiamo utilizzando la parola chiave LEFT JOIN per unire le due tabelle e la parola chiave ON che useremo nella colonna ‘CustomerID’ per unire le due tabelle.

Puoi vedere i risultati di questa query SQL LEFT JOIN nella figura sottostante.

The results of our SQL LEFT JOIN query (Image credit: Petri/Michael Otey)

Questa query restituirà un set di risultati che include tutti i clienti nella tabella SalesLT.Customer, insieme a eventuali informazioni sull’ordine corrispondenti dalla tabella SalesLT.SalesOrderHeader. Se un cliente non ha ordini nella tabella SalesLT.SalesOrderHeader, allora le colonne di quella tabella saranno null. Puoi vedere diversi valori null nella figura precedente.

SQL RIGHT JOIN

Come potresti immaginare, l’operazione SQL RIGHT OUTER JOIN è essenzialmente l’opposto del LEFT OUTER JOIN. Il RIGHT OUTER JOIN seleziona i dati dalla tabella destra (Tabella 2) e combina questi dati con le righe dalla tabella sinistra (Tabella 1).

Il RIGHT JOIN restituisce un set di risultati che include tutte le righe nella tabella destra, anche se non hanno righe corrispondenti dalla tabella sinistra. Se una riga nella tabella destra non ha una riga corrispondente nella tabella sinistra, allora il set di risultati per le colonne dalla tabella sinistra sarà null.

Il diagramma seguente illustra come funziona un RIGHT JOIN con due tabelle:

How a right JOIN works with two tables (Image credit: Petri/Michael Otey)

Possiamo mostrare questo con le tabelle SalesLT.Customer e SalesLT.SalesOrderHeader dal database AdventuresLT2019. Per recuperare tutti gli ordini e le informazioni corrispondenti del cliente, è possibile utilizzare una query RIGHT JOIN come puoi vedere nell’esempio seguente:

USE AdventureWorksLT2019

SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate
FROM SalesLT.Customer c 
RIGHT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
  • In questo esempio, stiamo selezionando le colonne ‘CustomerID’, ‘FirstName’, ‘LastName’, ‘SalesOrderID’ e ‘OrderDate’ dalle tabelle SalesLT.Customer e SalesLT.SalesOrderHeader.
  • Il RIGHT JOIN viene utilizzato per unire le due tabelle e il ON specifica che stiamo unendo le due tabelle sulla colonna ‘CustomerID’.

Questa query restituirà un set di risultati che includerà tutti gli ordini nella tabella SalesLT.SalesOrderHeader, insieme alle informazioni del cliente corrispondenti dalla tabella SalesLT.Customer se disponibili. Se un ordine non ha un cliente corrispondente nella tabella SalesLT.Customer, le colonne del cliente nel set di risultati saranno nulle.

Potresti notare che questa query è molto simile alla query precedente. Tuttavia, il LEFT JOIN ha prodotto molte righe dalla tabella SaleOrderHeader con valori nulli. Tuttavia, la nostra ultima query non ha valori nulli nelle righe della tabella SaleOrderHeader.

I risultati della nostra operazione SQL RIGHT OUTER JOIN sono mostrati nella figura seguente.

The results of our SQL RIGHT OUTER JOIN operation (Image credit: Petri/Michael Otey)

SQL OUTER JOIN

SQL OUTER JOIN non è il tipo di operazione di join più comune. A volte chiamato FULL JOIN, la query OUTER JOIN non solo recupera le righe corrispondenti ma anche le righe non corrispondenti. In altre parole, restituisce dati dalla tabella unita quando c’è una corrispondenza in entrambe le tabelle di sinistra o di destra.

Come potresti immaginare, questo tende a produrre set di risultati più grandi degli altri tipi di join. Il seguente diagramma illustra come funziona un SQL OUTER JOIN con due tabelle.

How an SQL OUTER JOIN works with two tables (Image credit: Petri/Michael Otey)

I’ll give you an example of an SQL OUTER JOIN operation using the SalesLT.SalesOrderHeader and SalesLT.SalesOrderDetail tables. Here, we want to retrieve all sales orders and their associated details, including orders that don’t have any details records.

Per fare questo, possiamo usare un FULL OUTER JOIN. Questo restituirà anche eventuali righe di SalesOrderDetail che non avevano una corrispondente riga di SalesOrderHeader. Nella maggior parte dei casi normali, tutte le righe di SalesOrderDetails dovrebbero avere una corrispondente riga di SalesOrderHearder ma potrebbe non essere il caso se ci fosse un errore dell’applicazione o del sistema che questo può aiutare a individuare.

Ecco una query T-SQL che mostra un esempio di FULL OUTER JOIN:

USE AdventureWorksLT2019

SELECT soh.SalesOrderID, soh.OrderDate, sod.ProductID, sod.OrderQty, sod.UnitPrice
FROM SalesLT.SalesOrderHeader soh
FULL OUTER JOIN SalesLT.SalesOrderDetail sod
ON soh.SalesOrderID = sod.SalesOrderID
  • In questo esempio, stiamo selezionando le colonne ‘SalesOrderID’, ‘OrderDate’, ‘ProductID’, ‘Quantity’ e ‘UnitPrice’ sia dalle tabelle SalesLT.SalesOrderHeader che SalesLT.SalesOrderDetail.
  • Stiamo utilizzando la parola chiave FULL OUTER JOIN per unire le due tabelle e la parola chiave ON per specificare che la colonna SalesOrderID sarà utilizzata per unire le due tabelle.
  • Questa query restituirà un set di risultati che include tutti gli ordini di vendita nella tabella SalesLT.SalesOrderHeader, insieme alle relative informazioni dettagliate dalla tabella SalesLT.SalesOrderDetail. Includerà anche tutti i dettagli nella tabella SalesLT.SalesOrderDetail, insieme alle relative informazioni di intestazione dell’ordine se disponibili.
  • Se un ordine di vendita non ha dettagli nella tabella SalesLT.SalesOrderDetail, le colonne saranno NULL. Se un dettaglio non ha un corrispondente ordine di vendita nella tabella SalesLT.SalesOrderHeader, le colonne dell’ordine di vendita saranno NULL.

I risultati di questa operazione di FULL OUTER JOIN sono mostrati nella seguente figura.

The results of our FULL OUTER JOIN operation (Image credit: Petri/Michael Otey)

Apprendimento dei fondamenti degli SQL Join

In questo tutorial, ho coperto i tipi più comuni di JOIN SQL. Ho mostrato come utilizzare l’INNER JOIN, il LEFT JOIN, il RIGHT JOIN e l’OUTER JOIN, e ho anche spiegato in cosa differiscono e dove possono essere utilizzati. In un prossimo articolo, tratterò alcuni dei JOIN meno comuni come il CROSS JOIN e il SELF JOIN, quindi rimanete sintonizzati su Petri!

Articolo correlato:

Source:
https://petri.com/sql-join/