9th Dec 2022 Tempo di lettura: 9 minuti Quali sono i diversi tipi di JOIN SQL? Dmitri Vaitkun sql imparare sql sql joins Indice INNER JOIN (alias JOIN) JOIN ESTERNO SINISTRO JOIN ESTERNO DESTRO JOIN ESTERNO COMPLETO GIUNTA INCROCIATA Esercitatevi con tutti i tipi di JOIN SQL! Non si può sottovalutare l'importanza del JOIN nell'apprendimento dell'SQL. Non solo è una delle operazioni fondamentali nei database relazionali, ma è anche molto versatile, con molti tipi diversi. Sebbene il JOIN SQL possa intimorire all'inizio, una volta compreso diventa uno strumento molto utile nel vostro arsenale. Esploriamo tutti i tipi di SQL JOIN! Possiamo dire con certezza che l'operazione JOIN è una delle funzioni più potenti di SQL. È la fonte di invidia per tutti i DBMS (sistemi di gestione di database) non relazionali: è un concetto molto semplice, ma ampiamente applicabile nei casi di unione di due insiemi di dati. In poche parole, JOIN è un'operazione in cui le tabelle vengono confrontate tra loro, riga per riga. Questo confronto consente di ottenere colonne da qualsiasi tabella coinvolta in JOIN. Un ottimo punto di riferimento per gli esercizi dopo la lettura di questo articolo è il nostro corso interattivo SQL JOINs interattivo. Offre oltre 90 esercizi pratici sui diversi tipi di join qui trattati. Ora creiamo 2 tabelle per esplorare e padroneggiare l'arte di JOIN. La prima tabella, employeesè composta da 5 colonne: id - L'ID univoco del dipendente. name - Il nome del dipendente. specialization - La specializzazione del dipendente nell'azienda. coach_id - L'ID dell'allenatore/mentore del dipendente. Si tratta di un altro dipendente di un'azienda. project_id - L'ID del progetto corrente in cui il dipendente è coinvolto. idnamespecializationcoach_idproject_id 1Olli WoodwardDeveloper41 2Pete NolanManagerNULL1 3Will BarkerIT Support43 4Uma NormanDeveloperNULL4 5Peggy BergManager24 6Mary SheltonAnalystNULLNULL La seconda tabella è projects. Contiene 3 colonne: id - L'ID univoco del progetto. name - Il nome del progetto. is_external - Un valore booleano che rappresenta se il progetto è esterno o interno. idnameis_external 1Website UI/UX DesignTRUE 2Research & DevelopmentFALSE 3SupportFALSE 4Database Architecture DesignTRUE Notate che c'è un collegamento logico tra le due tabelle. L'indirizzo project_id in employees corrisponde a id di projects. I valori corrispondenti nelle tabelle sono codificati a colori per una migliore presentazione. Ora che abbiamo le tabelle, andiamo al sodo! INNER JOIN (alias JOIN) Il primo dei tipi di JOIN SQL è INNER JOIN. Quando si digita "JOIN" nel codice SQL, si utilizza INNER JOIN. Quindi, anche se non fa male, non è necessario scrivere INNER nelle query. La parola chiave ON segue tutte le JOIN in SQL. Indica l'inizio della condizione di connessione. INNER JOINs Come tutte le altre JOIN, la funzione produce solo le righe che soddisfano la condizione di connessione. Prima di proseguire, l'operatore JOIN non è l'unico modo per unire i dati di due tabelle. Si può anche usare WHERE. Siete interessati a saperne di più? Abbiamo l'articolo giusto per voi! Ma mettiamo da parte la teoria per un momento e passiamo alla codifica. Utilizziamo le nostre due tabelle e una INNER JOIN per scoprire quale dipendente lavora su quale progetto: SELECT employees.name as employee, specialization, projects.name as project FROM employees JOIN projects ON employees.project_id = projects.id Prima di vedere il risultato di questa query, analizziamo la query stessa. Come si può vedere, uniamo le due tabelle utilizzando JOIN. Dopo JOIN, specifichiamo l'operatore ON e la condizione di unione. Quindi, abbiamo unito le tabelle in base alla condizione che project_id della tabella employees sia uguale all'id della tabella projects. Osserviamo il risultato della query: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Vediamo che Olli Woodward e Pete Nolan hanno un progetto "Website UI/UX Design". Il loro project_id è uguale a 1, che è l'ID di questo progetto nella tabella projects. Lo stesso vale per le altre righe del risultato. Tuttavia, qui non vediamo Mary Shelton. Il suo project_id è NULL, e non c'è nessun progetto con l'id uguale a NULL. Allo stesso modo, il progetto "Ricerca e Sviluppo" ha l'ID 2, ma nessun dipendente ha l'id project_id uguale a 2. Vi siamo interessati a INNER JOIN e volete saperne di più? Date un'occhiata al nostro articolo specifico sulle INNER JOIN! JOIN ESTERNO SINISTRO LEFT OUTER JOIN è uno dei tipi di JOIN esterni di SQL. La parola chiave OUTER è opzionale e spesso viene omessa, lasciando così solo l'operatore LEFT JOIN. La differenza generale tra OUTER JOIN e INNER JOIN è che la OUTER JOIN include non solo le righe che soddisfano la condizione di connessione, ma anche le righe che non soddisfano la condizione da una (o più) tabelle. In particolare, la LEFT OUTER JOIN include le righe che soddisfano la condizione di connessione (proprio come la INNER JOIN) e tutte le altre righe della tabella di sinistra (o della prima). Utilizziamo l'esempio precedente, cambiando JOIN in LEFT JOIN per vedere la differenza: SELECT employees.name as employee, specialization, projects.name as project FROM employees LEFT JOIN projects ON employees.project_id = projects.id Ecco il risultato della query: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Mary SheltonAnalystNULL Come si può vedere, è stata aggiunta un'altra riga: Mary Shelton con il progetto NULL. Questa riga in particolare non soddisfa la condizione employees.project_id = projects.id, poiché non esistono progetti con un ID NULL. Ma questa riga esiste nella tabella employees quindi viene aggiunta al risultato. Il nome del progetto per Mary Shelton è un valore NULL per lo stesso motivo, poiché non esistono ID NULL tra i progetti. Ora avete capito l'idea principale di LEFT OUTER JOIN. Detto questo, potete sempre leggere il nostro articolo sulle LEFT OUTER JOIN per saperne di più o per vedere altri esempi! INNER e LEFT OUTER JOINs sono i tipi più comuni di JOIN in SQL. Assicuratevi quindi di esercitarvi a fondo con il nostro corso. SQL JOINs corso. Leggete qui il corso. JOIN ESTERNO DESTRO La RIGHT OUTER JOIN può essere vista come un fratello gemello della LEFT OUTER JOIN. L'unica differenza tra questi due tipi di JOIN SQL è la tabella da cui vengono prelevati i record, indipendentemente dalla condizione JOIN. Nel caso di LEFT OUTER JOIN, si tratta della prima tabella o della tabella di sinistra; nel caso di RIGHT OUTER JOIN, si tratta della seconda tabella o della tabella di destra. Utilizziamo l'esempio precedente, ma ora cambiamo LEFT JOIN in RIGHT JOIN: SELECT employees.name as employee, specialization, projects.name as project FROM employees RIGHT JOIN projects ON employees.project_id = projects.id Analizziamo ora il risultato della query: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design NULLNULLResearch & Development Come si può vedere, il record di Mary Shelton è sparito. Non soddisfa la condizione ON e non appartiene alla tabella di destra. Quindi, non è incluso nel risultato. D'altra parte, ora abbiamo il progetto "Ricerca e sviluppo". Non soddisfa la condizione JOIN, ma esiste nella tabella di destra e quindi viene incluso nel risultato. Si noti che questa riga ha NULLs nelle colonne dipendenti e specialization. Questo perché nessun record della tabella employees ha project_id uguale a 2, l'ID di questo progetto. Pertanto, viene restituito un NULL. JOIN ESTERNO COMPLETO FULL OUTER JOIN, o semplicemente FULL JOIN, è l'ultimo tipo di OUTER JOIN. In un certo senso, combina sia LEFT che RIGHT OUTER JOINs. Sebbene includa i record che soddisfano la condizione JOIN, include anche le righe di entrambe le tabelle che non la soddisfano. In altre parole, FULL JOIN restituisce tutte le righe di entrambe le tabelle. Se una riga di una tabella non ha un record corrispondente nell'altra tabella, i dati mancanti vengono riempiti con NULLs. Vediamo un esempio di FULL OUTER JOIN: SELECT employees.name as employee, specialization, projects.name as project FROM employees FULL JOIN projects ON employees.project_id = projects.id Ecco il risultato: employeespecializationproject Olli WoodwardDeveloperWebsite UI/UX Design Pete NolanManagerWebsite UI/UX Design Will BarkerIT SupportSupport Uma NormanDeveloperDatabase Architecture Design Peggy BergManagerDatabase Architecture Design Mary SheltonAnalystNULL NULLNULLResearch & Development Come si può vedere, qui abbiamo tutte le righe di entrambe le tabelle. Le righe che soddisfano la condizione hanno i dati corrispondenti di entrambe le tabelle. Per le righe che non soddisfano la condizione, le colonne dell'altra tabella sono riempite con NULLs. Se volete una breve descrizione accessibile di FULL OUTER JOIN e di altri tipi di JOIN SQL, utilizzate il nostro SQL JOIN Cheat Sheet. GIUNTA INCROCIATA Questo tipo di JOIN SQL è molto diverso da quelli menzionati finora in questo articolo. Non solo il suo scopo è diverso, ma ha anche una sintassi leggermente diversa. Quando viene utilizzata in una query, CROSS JOIN restituisce un prodotto cartesiano: tutte le possibili combinazioni delle righe di entrambe le tabelle. Tutti i record di una tabella vengono automaticamente uniti a tutti i record dell'altra. Inoltre, non esiste la condizione ON. Per questo JOIN in una query, è sufficiente utilizzare l'operatore CROSS JOIN senza seguire la parola chiave ON. Vediamo come funziona il tutto in un esempio: SELECT employees.name as employee, projects.name as project FROM employees CROSS JOIN projects Notate che selezioniamo due colonne, il nome del dipendente e il nome del progetto, seguite da CROSS JOIN. Osserviamo il risultato: employeeproject Olli WoodwardWebsite UI/UX Design Olli WoodwardResearch & Development Olli WoodwardSupport Olli WoodwardDatabase Architecture Design Pete NolanWebsite UI/UX Design Pete NolanResearch & Development Pete NolanSupport Pete NolanDatabase Architecture Design Will BarkerWebsite UI/UX Design Will BarkerResearch & Development Will BarkerSupport Will BarkerDatabase Architecture Design Uma NormanWebsite UI/UX Design Uma NormanResearch & Development Uma NormanSupport Uma NormanDatabase Architecture Design Peggy BergWebsite UI/UX Design Peggy BergResearch & Development Peggy BergSupport Peggy BergDatabase Architecture Design Mary SheltonWebsite UI/UX Design Mary SheltonResearch & Development Mary SheltonSupport Mary SheltonDatabase Architecture Design Si noti il numero di righe restituite. È abbastanza facile calcolarlo: il numero di righe della prima tabella * il numero di righe della seconda tabella = il numero di righe risultanti. Quindi, ognuno dei 6 dipendenti è assegnato a ciascuno dei 4 progetti. Avete ancora qualche domanda in sospeso su CROSS JOIN? O forse volete solo saperne di più. Consultate la nostra Guida illustrata alle CROSS JOIN SQL! Esercitatevi con tutti i tipi di JOIN SQL! Ora conoscete i diversi tipi di JOIN in SQL. Questa è un'ottima occasione per approfondire queste nuove conoscenze o semplicemente per ripassare quelle già acquisite. In ogni caso, vi consiglio il nostro corso interattivo sulle JOIN in SQL. Con oltre 90 esercizi pratici, è un'opportunità per mettere in pratica questo aspetto fondamentale di SQL! Tags: sql imparare sql sql joins