JOIN in SQL Server: Tipi con esempi

⚡ Riepilogo intelligente

In SQL Server, le JOIN combinano righe provenienti da due o più tabelle in base a una colonna correlata, utilizzando le JOIN INNER, LEFT OUTER, RIGHT OUTER e FULL OUTER per controllare quali righe corrispondenti e non corrispondenti vengono visualizzate nel risultato.

  • 🔗 Scopo: Un'operazione JOIN recupera dati correlati da due o più tabelle confrontando una colonna comune, solitamente una chiave.
  • 🎯 UNIONE INTERNA: INNER JOIN restituisce solo le righe in cui la condizione di join è vera in entrambe le tabelle.
  • ⬅️ JOIN ESTERNO SINISTRO: LEFT OUTER JOIN restituisce tutte le righe della tabella di sinistra, riempiendo con NULL le colonne non corrispondenti della tabella di destra.
  • ➡️ JOIN ESTERNO DESTRO: RIGHT OUTER JOIN restituisce tutte le righe della tabella di destra, riempiendo con NULL le colonne della tabella di sinistra che non corrispondono.
  • 🔄 ISCRIZIONE ESTERNA COMPLETA: FULL OUTER JOIN restituisce tutte le righe di entrambe le tabelle, utilizzando NULL laddove la condizione non è soddisfatta.
  • 🔑 Condizione ON: La clausola ON specifica le colonne che collegano le tabelle, il più delle volte una coppia chiave primaria-chiave esterna.

JOIN in SQL Server: esempi di INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL OUTER JOIN.

Che cosa sono le JOIN in SQL Server?

È possibile recuperare i dati da più di una tabella utilizzando l'istruzione JOIN in SQL Server. Un JOIN combina righe di due o più tabelle in base a una colonna correlata tra di esse, il più delle volte una chiave primaria abbinato a un chiave esternaIn SQL Server esistono principalmente quattro tipi di JOIN:

  • INNER JOIN / join semplice
  • GIUNZIONE ESTERNA SINISTRA / GIUNZIONE SINISTRA
  • GIUNZIONE ESTERNA DESTRA / GIUNZIONE DESTRA
  • COMPLETO ESTERNO JOIN

La tabella seguente riassume le righe restituite da ciascun tipo di JOIN:

Tipo di unione Righe restituite
INNER JOIN Vengono considerate solo le righe in cui la condizione di join corrisponde in entrambe le tabelle.
UNIONE ESTERNO SINISTRO Tutte le righe della tabella di sinistra, più le righe corrispondenti della tabella di destra (NULL dove non vi è corrispondenza).
GIUNZIONE ESTERNA DESTRA Tutte le righe della tabella di destra, più le righe corrispondenti della tabella di sinistra (NULL dove non vi è corrispondenza).
COMPLETO ESTERNO JOIN Tutte le righe di entrambe le tabelle, con valori NULL laddove la condizione non è soddisfatta.

Gli esempi seguenti utilizzano due con tabelleStudenti e Tasse, uniti in base alla colonna comune di ammissione. Ogni sezione spiega un tipo di JOIN con la sua sintassi, una query di esempio e il risultato.

INNER JOIN

Questo tipo di SQL Server La funzione JOIN restituisce le righe di tutte le tabelle in cui la condizione di join è vera. La sua sintassi è la seguente:

SELECT columns
FROM table_1 
INNER JOIN table_2
ON table_1.column = table_2.column;

Utilizzeremo le due tabelle seguenti per dimostrarlo. La tabella Studenti qui sotto elenca ogni studente e il relativo numero di matricola:

Tabella degli studenti con indicazione delle colonne relative all'ammissione, al nome e al cognome.

La tabella delle tariffe riportata di seguito indica l'importo pagato per ciascun numero di ammissione:

Tabella delle tariffe con indicazione del numero di ingressi e della colonna "importo pagato"

Il seguente comando illustra un'operazione INNER JOIN in SQL Server con un esempio:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
INNER JOIN Fee
ON Students.admission = Fee.admission

Il comando restituisce il seguente risultato, mostrando solo i numeri di ammissione presenti in entrambe le tabelle:

Risultato INNER JOIN che mostra solo gli studenti la cui ammissione compare in entrambe le tabelle

Possiamo individuare gli studenti che hanno pagato la retta. Abbiamo utilizzato la colonna con i valori comuni a entrambe le tabelle, ovvero la colonna relativa all'ammissione.

UNIONE ESTERNO SINISTRO

Questo tipo di join restituisce tutte le righe della tabella di sinistra più i record della tabella di destra con valori corrispondenti. Ad esempio:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
LEFT OUTER JOIN Fee
ON Students.admission = Fee.admission

Il codice restituisce il seguente risultato, keeping ogni studente anche quando non corrisponde alcuna registrazione delle tasse:

LEFT OUTER JOIN risultato keeping ogni riga Studenti con NULL per tariffe non corrispondenti

I record senza valori corrispondenti vengono sostituiti con NULL nelle rispettive colonne.

GIUNZIONE ESTERNA DESTRA

Questo tipo di join restituisce tutte le righe della tabella di destra e solo quelle con valori corrispondenti nella tabella di sinistra. Per esempio:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
RIGHT OUTER JOIN Fee
ON Students.admission = Fee.admission

L'istruzione OUTER JOIN in SQL Server restituisce il seguente risultato:

RIGHT OUTER JOIN risultato keeping ogni riga relativa alle tariffe e le corrispondenti righe relative agli studenti

Il motivo dell'output precedente è che tutte le righe nella tabella Tariffe sono disponibili nella tabella Studenti quando corrispondono nella colonna di ammissione.

COMPLETO ESTERNO JOIN

Questo tipo di join restituisce tutte le righe di entrambe le tabelle, con valori NULL laddove la condizione JOIN non è vera. Ad esempio:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
FULL OUTER JOIN Fee
ON Students.admission = Fee.admission

Il codice restituisce il seguente risultato per le query FULL OUTER JOIN in SQL, combinando tutte le righe di entrambe le tabelle:

Risultato di FULL OUTER JOIN che combina tutte le righe Studenti e Tasse con valori NULL per gli spazi vuoti

DOMANDE FREQUENTI

Un'operazione CROSS JOIN restituisce il prodotto cartesiano di due tabelle, accoppiando ogni riga della prima tabella con ogni riga della seconda. Non ha una condizione ON, quindi una tabella di 10 righe e una di 5 righe producono 50 righe.

Si utilizza un SELF JOIN: la tabella viene elencata due volte con alias diversi, quindi unita in base a una colonna correlata per confrontare le righe all'interno della stessa tabella. È una tecnica comune per i dati gerarchici, come ad esempio l'associazione di ciascun dipendente al proprio responsabile.

L'operazione JOIN combina colonne di tabelle correlate affiancandole, confrontando le righe in base a una condizione. L'operazione UNION, invece, sovrappone verticalmente i risultati di due query SELECT, aggiungendo righe. JOIN allarga il risultato; UNION lo allunga.

Sì. La clausola ON può testare più colonne unite con AND, ad esempio ON a.col1 = b.col1 AND a.col2 = b.col2. Le condizioni composite sono comuni quando una singola colonna non identifica in modo univoco una riga.

La clausola ON definisce come vengono abbinate le tabelle e viene applicata durante l'esecuzione del join. La clausola WHERE filtra il risultato combinato successivamente. Con gli OUTER JOIN, spostare una condizione tra di essi può modificare le righe restituite.

Sì. Scrivendo JOIN senza prefisso, il valore predefinito è INNER JOIN, quindi vengono restituite solo le righe corrispondenti. Aggiungendo LEFT, RIGHT o FULL prima di OUTER JOIN si modificano le righe non corrispondenti che vengono mantenute nel risultato.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub È possibile creare query INNER, LEFT, RIGHT e FULL OUTER JOIN tramite un prompt in linguaggio naturale. Verificare sempre la condizione ON e il tipo di join per assicurarsi che il set di risultati corrisponda a quello desiderato.

Gli assistenti basati su intelligenza artificiale e apprendimento automatico suggeriscono il tipo di join corretto, generano condizioni ON multi-tabella e segnalano chiavi mancanti o prodotti cartesiani accidentali. Possono anche consigliare indici per le colonne di join. Lo sviluppatore verifica ogni suggerimento prima di eseguirlo.

Riassumi questo post con: