UNION e UNION ALL
La differenza in termini di deduplicazione e prestazioni e il motivo per cui di solito si intende UNION ALL
UNION e UNION ALL è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
Perché gli intervistatori chiedono di UNION
Le operazioni sugli insiemi impilano verticalmente un insieme di risultati sopra un altro. UNION e UNION ALL sono i primi operatori sugli insiemi a cui ricorrono gli intervistatori, perché la differenza tra i due consiste in una risposta di una sola riga che rivela se si comprende il costo dell'operazione.
La domanda viene quasi sempre formulata così: «Qual è la differenza tra UNION e UNION ALL e quale dovrebbe usare?» Una risposta valida menziona in un'unica spiegazione la rimozione dei duplicati, l'ordinamento e le prestazioni.
Cosa fa UNION
UNION combina le righe di due query in un unico insieme di risultati e poi rimuove le righe duplicate. Due righe sono duplicate solo se tutte le colonne corrispondono.
Per rimuovere i duplicati, il motore deve ordinare o sottoporre a hashing tutte le righe combinate, svolgendo quindi un lavoro effettivo. UNION restituisce un insieme nel senso matematico del termine: senza ripetizioni.
SELECT city FROM customers
UNION
SELECT city FROM suppliers;Cosa fa UNION ALL
UNION ALL concatena i due insiemi di risultati e mantiene ogni riga, inclusi i duplicati. Non esegue alcuna deduplicazione, quindi non ordina né applica l'hashing a questo scopo.
Poiché evita il passaggio di deduplicazione, UNION ALL è quasi sempre più veloce ed è la scelta corretta quando si sa che le righe non possono sovrapporsi o quando si desiderano effettivamente i duplicati.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;La differenza in termini di prestazioni
Il punto fondamentale da ricordare per il colloquio è: UNION ALL è meno costoso perché non esegue mai la deduplicazione. UNION deve confrontare ogni riga combinata con tutte le altre per eliminare le ripetizioni.
UNION= UNION ALL + un passaggio DISTINCT implicito.- Su insiemi di risultati grandi, quel DISTINCT può rappresentare la parte principale del costo della query.
Se non ha bisogno di rimuovere i duplicati, scegliere UNION spreca CPU e memoria.
Un esempio svolto con i duplicati
Supponiamo che entrambe le query possano restituire la riga 'Paris'. Con UNION si ottiene una sola occorrenza di Paris. Con UNION ALL si ottiene Paris due volte.
Gli intervistatori amano chiedere di prevedere il numero di righe. Visualizzi prima la concatenazione senza modifiche, poi si chieda: l'operatore elimina le ripetizioni?
-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION -> Paris, Lyon, Nice (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)I duplicati sono definiti considerando tutte le colonne
Un errore comune: due righe sono duplicate solo se ogni colonna selezionata è uguale. Basta aggiungere una colonna con un valore diverso perché le righe non siano più duplicate; UNION le manterrà entrambe.
Per questo SELECT id, city spesso restituisce più righe di SELECT city con UNION, anche sulle stesse tabelle.
SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removedOrdinare il risultato combinato
Non può inserire ORDER BY nei singoli rami: si applica all'intero risultato combinato e deve comparire una sola volta, alla fine.
L'intervistatore potrebbe chiederle dove vada inserito ORDER BY. La risposta è: un singolo ORDER BY dopo l'ultima query, che faccia riferimento alle colonne di output tramite il nome o la posizione.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;I nomi delle colonne provengono dalla prima query
Quando fa riferimento alle colonne nell'ORDER BY finale, utilizzi i nomi (o gli alias) della prima SELECT. I nomi delle colonne della seconda query vengono ignorati nelle intestazioni dell'output.
Questo è importante quando i rami assegnano nomi diversi alle colonne. Assegni un alias al primo ramo per controllare l'intestazione dell'output.
SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;Quando scegliere UNION
Utilizzi UNION solo quando è realmente possibile che vi siano righe sovrapposte e desidera ottenere ogni riga distinta una sola volta. Esempi: unire due elenchi di contatti in cui la stessa persona può comparire in entrambi, oppure creare un elenco deduplicato di valori distinti provenienti da più origini.
Se può garantire che le origini siano disgiunte, UNION ALL produce lo stesso risultato più velocemente.
SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across bothQuando scegliere UNION ALL
Utilizzi UNION ALL quando non possono verificarsi duplicati, quando i duplicati hanno un significato o quando eseguirà un'aggregazione in seguito. Un esempio classico consiste nell'impilare tabelle di partizione mensili che non condividono alcuna riga.
Consiglio per i colloqui: dichiari che UNION ALL è la scelta predefinita e che si ricorre a UNION solo quando la deduplicazione è effettivamente necessaria.
SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;Mettere tutto insieme
Una risposta ben formulata in un colloquio potrebbe essere: "UNION rimuove le righe duplicate, operazione che richiede un ordinamento o un hash; UNION ALL conserva tutto ed è più veloce. Entrambi richiedono lo stesso numero di colonne e tipi compatibili, e qualsiasi ORDER BY va inserito una sola volta alla fine. Scelgo UNION ALL per impostazione predefinita, a meno che non sia necessaria la deduplicazione."
Questa singola frase dimostra al tempo stesso correttezza e consapevolezza delle prestazioni.
Controllo rapido
Verifichi la propria comprensione della differenza tra UNION e UNION ALL.
Riepilogo
Punti chiave:
UNION= combina e rimuove le righe duplicate (unDISTINCTimplicito, con un costo aggiuntivo).UNION ALL= combina e conserva tutto; è più veloce e costituisce la scelta predefinita sensata.- Perché due righe siano duplicate, devono corrispondere tutte le colonne.
- Un singolo
ORDER BYva inserito alla fine e utilizza i nomi delle colonne della prima query.
Scelga UNION ALL per impostazione predefinita e ricorra a UNION solo quando la deduplicazione è davvero necessaria.
Domande Frequenti
La lezione «UNION e UNION ALL» è gratuita?
Sì — il testo completo di «UNION e UNION ALL» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «UNION e UNION ALL»?
La differenza in termini di deduplicazione e prestazioni e il motivo per cui di solito si intende UNION ALL Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «UNION e UNION ALL»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?
Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- UNION e UNION ALL
- Compatibilità del numero e dei tipi di colonne
- INTERSECT ed EXCEPT per i confronti
- Simulare le operazioni sugli insiemi con i join