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!

SQL - UNION vs UNION ALL

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

  1. Risultati Distinti: UNION rimuove automaticamente le righe duplicate dal set di risultati finale.
  2. Compatibilità delle Colonne: Le istruzioni SELECT devono avere lo stesso numero di colonne, e queste colonne dovrebbero avere tipi di dati compatibili.
  3. 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

  1. Risultati con Duplicati: UNION ALL tiene tutte le righe, inclusi i duplicati.
  2. Performance Migliore: Poiché non deve rimuovere duplicati, UNION ALL è generalmente più veloce di UNION.
  3. 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:

  1. Combinare elenchi di clienti da diverse regioni, assicurandosi che non ci siano duplicati.
  2. Unire cataloghi di prodotti da diversi fornitori, rimuovendo articoli duplicati.

Quando Usare UNION ALL

Scegli UNION ALL quando:

  1. Sai che non ci sono duplicati nei tuoi set di dati.
  2. Vuoi mantenere tutte le righe, inclusi i duplicati.
  3. 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