21st Jul 2022 Tempo di lettura: 8 minuti Come unire tabelle in SQL senza usare JOIN Tihomir Babic fact table data warehouse Indice Il primo metodo: FROM e WHERE Sintassi Esempio Query Risultato Il secondo metodo: UNIONE/UNIONE DI TUTTI Sintassi Esempio Query: UNIONE Risultato: UNION Query: UNION ALL Risultato: UNION ALL Sì, le tabelle possono essere unite senza la parola chiave JOIN Imparare tutti i modi possibili per unire le tabelle in SQL Ecco come è possibile unire tabelle senza la parola chiave JOIN senza la parola chiave JOIN. Sembra che non sia possibile: unire tabelle in SQL senza usare la parola chiave JOIN. Ma l'uso della parola chiave JOIN non è l'unico modo per unire le tabelle in SQL. In questo articolo verranno illustrati altri due metodi per unire le tabelle. Nessuno dei due richiede la parola chiave JOIN per funzionare. Si tratta di: L'uso di una virgola tra i nomi delle tabelle nella clausola FROM e la specificazione della condizione di unione in una clausola di tipo " ". WHERE Utilizzando UNION/UNION ALL. Presumo che sappiate come funzionano le JOIN. Se ne avete bisogno, ecco un ripasso su come unire le tabelle usando le JOIN. Il primo metodo: FROM e WHERE Sintassi La sintassi di questo metodo per unire le tabelle senza usare JOINè la seguente: SELECT * FROM , WHERE È possibile sostituire la parola chiave JOIN con una virgola nella clausola FROM. Cosa fare dopo? Non c'è la parola chiave ON per indicare la condizione di unione, come invece avviene quando si usa JOIN, ad esempio su quali due colonne si desidera unire le tabelle. In questo metodo, si utilizza semplicemente una clausola WHERE per farlo. Questo metodo fa esattamente la stessa cosa: SELECT * FROM <table1> JOIN <table2> ON <condition> Vediamo come funziona in pratica. Esempio In questo esempio, ho bisogno di trovare il nome dell'artista, gli album che ha registrato e gli anni in cui sono stati registrati, per ogni artista. Per mostrarvi come funziona questo metodo, utilizzerò due tabelle. La prima è artist: idartist_name 1Paul Simon 2Marvin Gaye 3Bettye LaVette 4Joni Mitchell 5Sly and the Family Stone Si tratta di una semplice tabella contenente alcuni dei miei musicisti preferiti. L'altra tabella, albumsi presenta in questo modo: idalbum_nameyear_recordedartist_id 1Dance to the Music19685 2Small Talk19745 3Stranger to Stranger20161 4I've Got My Own Hell to Raise20053 5Blues19714 6Court and Spark19744 7A Tribute to the Great Nat "King" Cole19652 8Graceland19861 9Still Crazy After All These Years19751 10In the Blue Light20181 11There's a Riot Goin' On19715 12The Scene of the Crime20073 13Mingus19794 14What's Going On19712 15Here, My Dear19782 Questi sono gli album registrati dai musicisti della prima tabella. Query La query per unire queste tabelle senza la parola chiave JOIN si presenta come segue: SELECT artist_name, album_name, year_recorded FROM artist, album WHERE artist.id = album.artist_id; Per prima cosa, specifico le colonne che voglio vedere nel mio risultato: artist_name, album_name, e year_recorded. Esse provengono da artist o album. Unisco queste due tabelle semplicemente elencandole nella clausola FROM e separandole con una virgola. La clausola WHERE viene generalmente utilizzata per filtrare i risultati. Posso usarla per filtrare questo risultato in modo che mostri tutti i dati in cui la colonna id della tabella artist è uguale alla colonna artist_id della tabella album. Si può notare che la condizione in WHERE in questa query è la stessa che sarebbe dopo la parola chiave ON quando si usa JOIN: artist.id = album.artist_id. La query equivalente con la parola chiave JOIN è la seguente: SELECT artist_name, album_name, year_recorded FROM artist JOIN album ON artist.id = album.artist_id; Risultato Entrambe le query restituiscono lo stesso risultato: artist_namealbum_nameyear_recorded Paul SimonIn the Blue Light2018 Paul SimonStill Crazy After All These Years1975 Paul SimonGraceland1986 Paul SimonStranger to Stranger2016 Marvin GayeHere, My Dear1978 Marvin GayeWhat's Going On1971 Marvin GayeA Tribute to the Great Nat "King" Cole1965 Bettye LaVetteThe Scene of the Crime2007 Bettye LaVetteI've Got My Own Hell to Raise2005 Joni MitchellMingus1979 Joni MitchellCourt and Spark1974 Joni MitchellBlues1971 Sly and the Family StoneThere's a Riot Goin' On1971 Sly and the Family StoneSmall Talk1974 Sly and the Family StoneDance to the Music1968 Il risultato combina i dati delle due tabelle iniziali. Ora posso vedere, ad esempio, che Paul Simon ha registrato l'album "In the Blue Light" nel 2018. Se non vi fidate della mia query, potete sempre controllare Wikipedia! Questo metodo utilizza una colonna comune per unire le tabelle. Ricordiamo che è possibile unire anche tabelle che non hanno una colonna comune. Il secondo metodo: UNIONE/UNIONE DI TUTTI Sintassi SELECT , , … FROM UNION / UNION ALL SELECT , , … FROM Sia UNION che UNION ALL sono utilizzati per unire il risultato della prima query con quello della seconda. È sufficiente scrivere due istruzioni SELECT e scrivere UNION o UNION ALL tra di esse. Ma qual è la differenza tra queste due parole chiave SQL? Ricordate: UNION rimuove le righe duplicate dalla query e le mostra una sola volta. UNION ALL mostra tutte le righe di entrambe le tabelle, indipendentemente dal numero di duplicati. Affinché UNION e UNION ALL funzionino, tutte le colonne delle due istruzioni SELECT devono corrispondere. Ciò significa che il numero di colonne selezionate deve essere lo stesso e i tipi di dati di tali colonne devono essere gli stessi. Questi due operatori sono chiamati operatori di set. Leggete questo articolo per saperne di più su questi e altri operatori di set. Esempio Anche in questo esempio abbiamo due tabelle. La prima è denominata customer: idfirst_namelast_name 1JimmyHellas 2FrancoisJambony 3RenataTraviata 4CarmenNaburana 5SteveInicks 6ElviraSamson 7AlpaCino 8RosaSparks 9BernardineSane 10BertRandrussell Contiene l'elenco dei miei clienti. La seconda tabella è supplier: idfirst_namelast_name 1ArpadPolanski 2BillyVan Persie 3SteveInicks 4Jean-ClaudeZaandam 5EminaArkayeva 6BoMilosz 7JanWrangler 8HeinrichStroopwafel 9HerringoStarr 10JosephineMatijevic 11AlpaCino 12FlintWestwood 13DesPaulmond 14WilmaJackson 15KatrinVerson 16BertRandrussell 17CarmenNaburana 18JimmyTulp 19LuisWolf 20MirandaFanucci Se si esaminano le tabelle più da vicino, si nota che alcune persone sono presenti in entrambe le tabelle. Per esempio, guardate Steve Inicks: significa che Steve è, insieme ad altri, sia mio cliente (acquista alcuni servizi dalla mia azienda) sia mio fornitore (mi fornisce alcuni servizi). Vediamo ora cosa succede quando unisco queste tabelle con UNION o UNION ALL. Query: UNIONE Questo metodo per unire le tabelle senza usare la parola chiave JOIN si traduce nella seguente query: SELECT first_name, last_name FROM customer UNION SELECT first_name, last_name FROM supplier; La prima istruzione SELECT seleziona le colonne first_name e last_name dalla tabella customer. La seconda istruzione SELECT fa lo stesso, ma dalla tabella supplier. Uso UNION per unire i risultati di queste due query. Funziona: ci sono due colonne in entrambe le istruzioni SELECT e sono dello stesso tipo di dati. Hanno anche lo stesso nome, anche se questo non è necessario per il funzionamento della query. Risultato: UNION Eseguendo la query si ottiene questo risultato: first_namelast_name AlpaArpad CinoBilly JosephineMatijevic LuisWolf Jean-ClaudeZaandam SteveInicks BillyVan Persie EminaArkayeva MirandaFanucci BoMilosz JimmyHellas FrancoisJambony RosaSparks KatrinVerson JanWrangler BernardineSane HeinrichStroopwafel ElviraSamson RenataTraviata JimmyTulp WilmaJackson ArpadPolanski BertRandrussell DesPaulmond FlintWestwood CarmenNaburana HerringoStarr Come ho detto, si tratta di una combinazione di tutti i dati di entrambe le tabelle. Controlliamo se ci sono duplicati. Ho detto che Steve Inicks è presente sia in customer e supplier e in entrambe le tabelle. Nel risultato della query, lo si trova solo una volta. Ho contrassegnato la riga in cui si trova. Vediamo come questo metodo è diverso da UNION ALL. Query: UNION ALL La query in questo caso è: SELECT first_name, last_name FROM customer UNION ALL SELECT first_name, last_name FROM supplier; Come si può vedere, non è molto diversa. In effetti, si tratta della stessa query, con l'eccezione di UNION ALL al posto di UNION. Tuttavia, i risultati sono diversi. Diamo un'occhiata. Risultato: UNION ALL Il risultato della query è: first_namelast_name JimmyHellas FrancoisJambony RenataTraviata CarmenNaburana SteveInicks ElviraSamson AlpaCino RosaSparks BernardineSane BertRandrussell ArpadPolanski BillyVan Persie SteveInicks Jean-ClaudeZaandam EminaArkayeva BoMilosz JanWrangler HeinrichStroopwafel HerringoStarr JosephineMatijevic AlpaCino FlintWestwood DesPaulmond WilmaJackson KatrinVerson BertRandrussell CarmenNaburana JimmyTulp LuisWolf MirandaFanucci Sapendo che Steve Inicks compare sia come cliente che come fornitore, controlliamo quante volte compare nel risultato. È presente due volte, entrambe contrassegnate in blu. Ho segnato anche altre tre persone che compaiono due volte: Alpa Cino, Bert Randrussell e Carmen Naburana. Ecco un altro esempio di utilizzo di UNION e UNION ALL... Sì, le tabelle possono essere unite senza la parola chiave JOIN Come si è appena visto, non è sempre necessario usare la parola chiave JOIN per unire due tabelle in SQL. È possibile sostituirla con una virgola nella clausola FROM e dichiarare la condizione di unione nella clausola WHERE. L'altro metodo consiste nello scrivere due istruzioni SELECT. Il risultato di ognuna di esse è una tabella, quindi è sufficiente utilizzare UNION o UNION ALL per unire le due tabelle. Tenete presente che questo metodo funziona solo se le istruzioni SELECT hanno lo stesso numero di colonne e gli stessi tipi di dati. Usare UNION quando non si vogliono mostrare i duplicati e UNION ALL quando si vogliono vedere i duplicati. Imparare tutti i modi possibili per unire le tabelle in SQL Più modi si conoscono per unire le tabelle in SQL, meglio è. Con questi due metodi e il JOIN, unire le tabelle diventa più facile. I risultati delle query sono più vicini a quelli desiderati e si ottiene di più da SQL. Conoscere una serie di modi per unire le tabelle consente anche di movimentare un po' il codice. Può essere noioso scrivere sempre tutto allo stesso modo. Ma soprattutto, ognuno dei tre metodi è utile in situazioni diverse. Potete imparare tutti questi metodi di unione delle tabelle nel nostro corso SQL Basics . Questo è solo un primo passo verso la padronanza di SQL from A to Z. È necessario fare molta pratica per padroneggiare l'unione delle tabelle. Forse il modo migliore è scegliere almeno un'opzione online dal nostro elenco di dieci. Tags: fact table data warehouse