SQL - UNION vs UNION ALL
Ciao a tutti, appassionati di SQL in erba! Oggi ci imbarcheremo in un viaggio emozionante nel mondo del SQL, concentrandoci su due potenti operatori: UNION e UNION ALL. Come il tuo amico insegnante di informatica con anni di esperienza alle spalle, sono qui per guidarti attraverso questi concetti con chiarezza, umorismo e tanti esempi del mondo reale. Allora, entriamo nel vivo della questione!
Cos'è UNION?
Definizione e Concetto di Base
UNION è come un cuoco esperto che unisce ingredienti da ricette diverse per creare un piatto unico. In termini di SQL, è un operatore che ci permette di combinare i set di risultati di due o più istruzioni SELECT in un singolo set di risultati.
Ecco la sintassi di base:
SELECT colonna1, colonna2, ... FROM tabella1
UNION
SELECT colonna1, colonna2, ... FROM tabella2;
Caratteristiche Chiave di UNION
- Risultati Distinti: UNION rimuove automaticamente le righe duplicate dal set di risultati finale.
- Compatibilità delle Colonne: Le istruzioni SELECT devono avere lo stesso numero di colonne, e queste colonne dovrebbero avere tipi di dati compatibili.
- Ordine delle Colonne: L'ordine delle colonne nelle istruzioni SELECT è importante, poiché vengono combinate in base alla loro posizione.
UNION in Azione
Immaginiamo di avere due tabelle: fruits
e vegetables
. Vogliamo creare una lista combinata di tutti i prodotti agricoli.
-- tabella fruits
CREATE TABLE fruits (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);
INSERT INTO fruits VALUES
(1, 'Apple', 'Red'),
(2, 'Banana', 'Yellow'),
(3, 'Orange', 'Orange');
-- tabella vegetables
CREATE TABLE vegetables (
id INT,
name VARCHAR(50),
color VARCHAR(20)
);
INSERT INTO vegetables VALUES
(1, 'Carrot', 'Orange'),
(2, 'Broccoli', 'Green'),
(3, 'Tomato', 'Red');
-- query UNION
SELECT name, color FROM fruits
UNION
SELECT name, color FROM vegetables;
Questa query ci darà:
name | color |
---|---|
Apple | Red |
Banana | Yellow |
Orange | Orange |
Carrot | Orange |
Broccoli | Green |
Tomato | Red |
Notate come abbiamo solo una voce 'Orange', anche se compare in entrambe le tabelle. Questo è il mago di UNION - rimuove i duplicati!
Cos'è UNION ALL?
Definizione e Concetto di Base
Ora, incontriamo il cugino entusiasta di UNION, UNION ALL. Mentre UNION è come un cuoco attento che rimuove ingredienti duplicati, UNION ALL è come un cuoco che crede "più è meglio!"
La sintassi è simile a UNION:
SELECT colonna1, colonna2, ... FROM tabella1
UNION ALL
SELECT colonna1, colonna2, ... FROM tabella2;
Caratteristiche Chiave di UNION ALL
- Risultati con Duplicati: UNION ALL tiene tutte le righe, inclusi i duplicati.
- Performance Migliore: Poiché non deve rimuovere duplicati, UNION ALL è generalmente più veloce di UNION.
- Compatibilità delle Colonne: Come UNION, richiede lo stesso numero di colonne con tipi di dati compatibili.
UNION ALL in Azione
Riutilizziamo le nostre tabelle fruits
e vegetables
:
SELECT name, color FROM fruits
UNION ALL
SELECT name, color FROM vegetables;
Questa query produrrà:
name | color |
---|---|
Apple | Red |
Banana | Yellow |
Orange | Orange |
Carrot | Orange |
Broccoli | Green |
Tomato | Red |
Notate che ora abbiamo due voci 'Orange' - una proveniente da fruits
e una da vegetables
. UNION ALL tiene tutte le righe, duplicati inclusi!
UNION vs UNION ALL: Confronto Testa a Testa
Per comprendere veramente la differenza, confrontiamoli fianco a fianco:
Caratteristica | UNION | UNION ALL |
---|---|---|
Gestione dei Duplicati | Rimuove duplicati | Tieni tutti i duplicati |
Performance | Più lento (a causa della deduplication) | Più veloce |
Dimensione del Set di Risultati | Potenzialmente più piccolo | Potenzialmente più grande |
Caso d'Uso | Quando sono necessari risultati unici | Quando sono richiesti tutti i risultati, inclusi duplicati |
Quando Usare UNION
Usa UNION quando devi combinare risultati da più query e vuoi assicurarti che ogni riga nel set di risultati sia unica. È perfetto per scenari come:
- Combinare elenchi di clienti da diverse regioni, assicurandosi che non ci siano duplicati.
- Unire cataloghi di prodotti da diversi fornitori, rimuovendo articoli duplicati.
Quando Usare UNION ALL
Scegli UNION ALL quando:
- Sai che non ci sono duplicati nei tuoi set di dati.
- Vuoi mantenere tutte le righe, inclusi i duplicati.
- La performance è una priorità e stai lavorando con grandi set di dati.
Esempi Pratici
Immergiamoci in alcuni scenari reali per consolidare la nostra comprensione.
Esempio 1: Elenco Dipendenti
Immagina di avere due tabelle: current_employees
e former_employees
. Vuoi creare un elenco completo.
-- Creare e popolare le tabelle
CREATE TABLE current_employees (id INT, name VARCHAR(50), department VARCHAR(50));
CREATE TABLE former_employees (id INT, name VARCHAR(50), department VARCHAR(50));
INSERT INTO current_employees VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'IT'),
(3, 'Charlie', 'Finance');
INSERT INTO former_employees VALUES
(4, 'David', 'Marketing'),
(5, 'Eve', 'IT'),
(2, 'Bob', 'IT'); -- Bob ha lavorato qui, è partito e poi è tornato
-- Query UNION
SELECT name, department FROM current_employees
UNION
SELECT name, department FROM former_employees;
-- Query UNION ALL
SELECT name, department FROM current_employees
UNION ALL
SELECT name, department FROM former_employees;
La query UNION mostrerà Bob solo una volta, mentre UNION ALL lo mostrerà due volte.
Esempio 2: Rapporto Vendite
Creiamo un rapporto di vendite combinando le vendite online e in negozio.
-- Creare e popolare le tabelle
CREATE TABLE online_sales (product VARCHAR(50), amount DECIMAL(10,2));
CREATE TABLE store_sales (product VARCHAR(50), amount DECIMAL(10,2));
INSERT INTO online_sales VALUES
('Laptop', 1200.00),
('Phone', 800.00),
('Tablet', 500.00);
INSERT INTO store_sales VALUES
('Laptop', 1100.00),
('Phone', 750.00),
('Headphones', 200.00);
-- Prodotti venduti unici (UNION)
SELECT product FROM online_sales
UNION
SELECT product FROM store_sales;
-- Tutte le registrazioni di vendita (UNION ALL)
SELECT 'Online' AS source, product, amount FROM online_sales
UNION ALL
SELECT 'Store' AS source, product, amount FROM store_sales;
La query UNION ci darà una lista di prodotti venduti across entrambi i canali, mentre UNION ALL fornisce un elenco completo di tutte le transazioni di vendita.
Conclusione
Eccoci, miei cari studenti! Abbiamo viaggiato attraverso i territori di UNION e UNION ALL, esplorando le loro somiglianze, differenze e applicazioni nel mondo reale. Ricorda, UNION è il tuo alleato per risultati unici e deduplicati, mentre UNION ALL è il tuo amico veloce quando hai bisogno di tutti i dati, duplicati inclusi.
Mentre continui la tua avventura SQL, troverai innumerevoli opportunità per utilizzare questi potenti strumenti. Come nella cucina, sapere quando usare ogni ingrediente (o, nel nostro caso, operatore) è la chiave per creare la perfetta ricetta di query.
Continua a praticare, rimani curioso e non aver paura di sperimentare con questi concetti. Prima di sapere, sarai un esperto di UNION e UNION ALL! Buona query!
Credits: Image by storyset