Sottoquery SQL Join con query esterna

Sottoquery Sql Join Con Query Esterna



Quando si tratta di lavorare con database relazionali, è necessario padroneggiare come manipolare e combinare le query per eseguire le attività desiderate. Questo è il motivo per cui ogni motore di database relazionale implementa il proprio sapore del linguaggio SQL tentando di fornire funzionalità, efficienza e facilità d'uso eccezionali per i propri utenti.

Una delle funzionalità più potenti di SQL sono le sottoquery. Le sottoquery sono un insieme di query nidificate all'interno di una query più ampia e complessa. Le sottoquery consentono di recuperare i dati o eseguire operazioni più complesse come una singola entità.







Possiamo utilizzare le sottoquery per eseguire il filtraggio dei dati, l'ordinamento, l'aggregazione su più tabelle e altro ancora.



Tuttavia, un'altra funzionalità nascosta nelle sottoquery SQL è nota come subquery join. Sono simili alle sottoquery; sono invece join che consentono di utilizzare le sottoquery all'interno di una query esterna per unire insieme le tabelle.



Se ti gira la testa, non preoccuparti perché i join di subquery possono essere difficili da padroneggiare, soprattutto all'inizio. Tuttavia, questo tutorial tenta di scomporre i join delle sottoquery in passaggi elementari senza lasciare troppo al caso.





Tieni presente che presumiamo che tu non sia nuovo a SQL, SQL Join, SQL Subquery o simili. Tuttavia, se lo sei, controlla i nostri tutorial sugli argomenti per saperne di più.

Padroneggia gli SQL Outer Join

Se vuoi capire come lavorare con i join di sottoquery, imparare a lavorare con i join esterni è un fattore chiave.



Se non hai familiarità, un join esterno SQL ti consente di recuperare tutte le righe da una tabella e le righe corrispondenti dalla seconda tabella. È un po' più complesso di così, incluso il join esterno sinistro, il join esterno destro, il join esterno completo, ecc.

In un join esterno sinistro SQL, la query restituisce tutte le righe della tabella di sinistra e le righe corrispondenti della tabella di destra. La query include i valori NULL nelle colonne risultanti se non sono presenti righe corrispondenti nella tabella di destra.

Nel caso di un right outer join, la query restituisce tutte le righe della tabella di destra ma solo le righe corrispondenti della tabella di sinistra. Allo stesso modo, la query include i valori NULL se non ci sono righe corrispondenti dalla tabella di sinistra.

Infine, abbiamo il full outer join. Questo join restituisce tutte le righe delle tabelle destra e sinistra ei valori NULL per tutti i record non corrispondenti.

Join di sottoquery SQL

Ora che abbiamo compreso le sottoquery SQL, parliamo dei join delle sottoquery. I join di sottoquery ci consentono di utilizzare le sottoquery all'interno di una query esterna per unire le tabelle.

Se lo stai chiedendo, è così? Sì, questo è tutto ciò che fanno i join di sottoquery.

Per dimostrarlo meglio, prendi il seguente esempio di sintassi che viene dimostrato di seguito:

SELEZIONARE *
A PARTIRE DAL tavolo1
JOIN ESTERNO SINISTRO (
SELEZIONA colonna1, colonna2
A PARTIRE DAL tavolo2
) sottointerrogazione AS
ON tabella1.colonna3 = subquery.colonna1;


Nella sintassi precedente, selezioniamo tutte le colonne dalla tabella uno utilizzando un join esterno sinistro per unirle con una sottoquery. Il ruolo della sottoquery è recuperare le colonne definite dalla tabella 2. Quindi la uniamo alla tabella 1 a condizione che la colonna 2 dalla tabella 1 e la colonna 1 dalla sottoquery.

Esempio pratico:

Teoricamente, sembra meno intuitivo, ma prendiamo uno scenario reale prendendo il database Sakila.

Supponiamo di voler recuperare l'elenco di tutti i film presenti nel database e le rispettive lingue. Le lingue dei film sono memorizzate nella tabella delle lingue ei nomi dei film sono memorizzati nella tabella dei film.

Tuttavia, la tabella del film ha una chiave esterna denominata colonna 'language_id' dalla tabella della lingua. Pertanto, possiamo utilizzare un subquery join con un left outer join per unire insieme le due tabelle, come dimostrato nella seguente query:

SELEZIONA f.titolo, l.nome AS lingua
DAL film f
JOIN ESTERNO SINISTRO (
SELECT language_id, nome
A PARTIRE DAL linguaggio
) AS l
ON f.language_id = l.language_id;


Nella query di esempio precedente, selezioniamo la colonna title dalla tabella film e la colonna name dalla tabella language.

Quindi utilizziamo una sottoquery per selezionare la colonna language_id e il nome dalla tabella delle lingue. Il passaggio successivo consiste nell'unirlo alla tabella film a condizione che language_id della tabella film sia uguale a language_id della tabella delle lingue.

Per garantire che tutti i film siano inclusi nel risultato, dobbiamo usare il left outer join che consiste di tutti i risultati della tabella di sinistra che, in questo caso, è la tabella dei film.

Un output di esempio è il seguente:


Possiamo anche fare lo stesso con un right outer join. La sintassi è la seguente:

SELEZIONARE *
A PARTIRE DAL tavolo1
JOIN ESTERNO DESTRO (
SELEZIONA colonna1, colonna2
A PARTIRE DAL tavolo2
) sottointerrogazione AS
ON tabella1.colonna3 = subquery.colonna1;


Questo si comporta in modo simile ma include tutti i record nella tabella di destra anche se non ci sono record corrispondenti.

Cose utili da sapere

È bene capire che sebbene i join di sottoquery siano incredibilmente utili e possano ottimizzare il tuo flusso di lavoro, usali con cautela.

Ad esempio, evita di utilizzare i join di sottoquery con un set di dati di grandi dimensioni. Questo perché possono restituire i record estesi che possono influire sulle prestazioni del database.

Prendi in considerazione l'utilizzo degli strumenti di analisi delle query prima di eseguire qualsiasi join di sottoquery.

Conclusione

Questa esercitazione ha esplorato i fondamenti dell'utilizzo di sottoquery e join di sottoquery in SQL. Alla fine di questo tutorial, ora capisci come lavorare con i join di sottoquery, perché potresti aver bisogno di usarli e un esempio pratico di come possono aiutarti nel tuo flusso di lavoro.