21st Jul 2022 Tempo di lettura: 5 minuti UNION vs. UNION ALL in SQL: Qual è la differenza? Andrew Bone sql imparare sql union Indice UNION vs. UNION ALL: Sintassi Sintassi di UNION Sintassi SQL UNION ALL SQL UNION e UNION ALL spiegati SQL UNION vs UNION ALL: Esempio UNION o UNION ALL: quale scegliere? Scrivere query complesse con UNION e UNION ALL UNION e UNION ALL sono entrambe utilizzate per recuperare record da più tabelle. Questo articolo illustra le differenze tra i due metodi, consentendo di fare la scelta migliore per ogni singolo scenario. È possibile utilizzare i comandi UNION e UNION ALL di SQL per ottenere dati da più tabelle del database. È un caso d'uso comune, considerando che la maggior parte dei database ha molte tabelle. Entrambi i comandi UNION e UNION ALL sono noti come operatori di insieme. In SQL, gli operatori set combinano i risultati di due o più query in un unico risultato. Per ulteriori informazioni sugli operatori di set, consultare questo articolo. Nel confronto tra UNION e UNION ALL, c'è una differenza sostanziale: UNION restituisce solo record unici UNION ALL restituisce tutti i record, compresi i duplicati. Se pensate di poter beneficiare di un corso ben strutturato e completo che copra le basi dell'SQL, prendete in considerazione questo corsoSQL Basics di LearnSQL. UNION vs. UNION ALL: Sintassi La sintassi di entrambe le varianti di UNION è molto simile. Esaminiamole singolarmente, iniziando da UNION. Sintassi di UNION Ricordate che UNION combina l'insieme dei risultati di due o più istruzioni SELECT, mostrando solo valori distinti. La sintassi SQL qui sotto mostra una UNION che si verifica tra due tabelle diverse; le colonne in entrambe le istruzioni SELECT hanno lo stesso tipo di dati o tipi corrispondenti. La clausola WHERE mostrata è un'inclusione opzionale: SELECT column_1, column_2 FROM table_1 [WHERE condition] UNION SELECT column_1, column_2 FROM table_2 [WHERE condition] Sintassi SQL UNION ALL Ricordate che UNION ALL combina i risultati di due o più istruzioni SELECT, mostrando tutti i valori, compresi gli eventuali duplicati. La sintassi SQL riportata di seguito mostra un UNION ALL che avviene tra due tabelle diverse. Ancora una volta, le colonne in SELECT sono di tipo uguale o corrispondente e la clausola WHERE è opzionale: SELECT column_1, column_2 FROM table_1 [WHERE condition] UNION ALL SELECT column_1, column_2 FROM table_2 [WHERE condition] SQL UNION e UNION ALL spiegati Esistono diverse regole di utilizzo per UNION e UNION ALL. La mancata osservanza di queste regole provoca messaggi di errore: Il numero di colonne utilizzate nella prima e nella seconda query deve essere lo stesso e i tipi di dati (ad esempio, INT, VARCHAR, ecc.) devono corrispondere. I nomi delle colonne inclusi nelle due query possono essere diversi; in questo caso, il set di dati risultante mostrerà i nomi delle colonne della prima query. Quando si usano gli alias SQL insieme a UNION e UNION ALL, è sufficiente includere l'alias nella prima query. L'inclusione nella seconda query non causerà errori, ma non avrà alcun impatto sul risultato. È possibile utilizzare UNION e UNION ALL per combinare tabelle che non hanno colonne in comune. Questo caso d'uso è trattato in questo articolo su come unire tabelle senza una colonna in comune. SQL UNION vs UNION ALL: Esempio Vediamo un esempio pratico per comprendere meglio UNION e UNION ALL. Immaginiamo di avere un database con informazioni su diversi club. Ogni tabella mostra i membri del club e il luogo che frequentano. Ogni club può avere diverse filiali o sedi in cui si riunisce. La prima tabella è per il club book_club. Contiene il nome dei soci del club e il sito location che frequentano: namelocation JohnFair Street MaryFair Street PaulWest Street Allo stesso modo, la tabella rowing_club contiene il nome dei soci del club e il sito location che frequentano. namelocation MaryFair Street SamanthaFair Street PaulWest Street Ora che abbiamo le nostre tabelle, scriviamo la nostra query SQL. Utilizzando la sintassi UNION, otteniamo la seguente query: SELECT name, location FROM book_club UNION SELECT name, location FROM rowing_club UNION esegue un'operazione di ordinamento ed elimina i record duplicati su tutte le colonne prima di restituire il set di dati combinato. Si può notare che utilizziamo colonne dello stesso tipo di dati e SELECT lo stesso numero di colonne in ogni query. Questo segue le regole dell'uso di UNION e dovrebbe essere eseguito senza errori. L'esecuzione di questa query produce il seguente risultato: namelocation JohnFair Street MaryFair Street PaulWest Street SamanthaFair Street Ecco fatto! Tutti i membri di entrambi i club! Ora modifichiamo la query e cambiamo UNION in UNION ALL: SELECT name, location FROM book_club UNION ALL SELECT name, location FROM rowing_club Con UNION ALL al suo posto, possiamo aspettarci che i risultati includano dei duplicati. Eseguiamo questa nuova query e osserviamo l'output: namelocation JohnFair Street MaryFair Street PaulWest Street MaryFair Street SamanthaFair Street PaulWest Street Riuscite a individuare tutti i record duplicati? Confrontate questo risultato con le due tabelle originali. Si può notare che ogni riga è stata inclusa. UNION o UNION ALL: quale scegliere? Ora che sapete come usare UNION e UNION ALL, vi starete chiedendo quale sia la soluzione migliore per la vostra situazione. Una cosa da considerare è che UNION rimuove i record duplicati, il che può influire sulle prestazioni della query. Se ci si sta chiedendo quale variante utilizzare, ricordarsi che: L'uso di UNION esegue effettivamente un SELECT DISTINCT sull'insieme dei risultati. Se si sa che tutti i record restituiti da UNION saranno unici, utilizzare UNION ALL; sarà più veloce. Questo è particolarmente importante per gli insiemi di dati più grandi. Scrivere query complesse con UNION e UNION ALL Abbiamo analizzato le differenze tra UNION e UNION ALL e i motivi per cui si potrebbe scegliere l'uno o l'altro. Con queste informazioni, è ora possibile recuperare i dati da due o più tabelle del database. Sia UNION che UNION ALL giocano un ruolo importante nell'uso delle query ricorsive, un argomento più avanzato che viene trattato in dettaglio nel corsoRecursive Queries . Non dimenticate di inserire tra i preferiti questa pagina, in modo da poter accedere facilmente alle spiegazioni e agli esempi di UNION e UNION ALL. Considerate anche di salvare questa pagina del nostro Ricettario SQL, che spiega come combinare i risultati di due query in SQL. Questa conoscenza può portare le vostre query SQL a un livello superiore, aiutandovi a gestire casi d'uso complessi con facilità! Tags: sql imparare sql union