SQLite - UNIONS Clause

Ciao, futuri maghi dei database! Oggi ci imbarchiamo in un viaggio emozionante nel mondo di SQLite e esploriamo la magica clausola UNIONS. Come il tuo amico insegnante di computer del vicinato, ti guiderò in questa avventura passo dopo passo. Allora, pigia sui tuoi virtuali bastoni (tastiere) e iniziamo!

SQLite - UNIONS Clause

Cos'è un UNION?

Immagina di avere due liste separate dei tuoi gusti preferiti di gelato - una dell'estate scorsa e una di quest'anno. Ora, cosa succederebbe se volessi combinare queste liste in una super lista di tutti i tuoi gusti preferiti? Questo è essenzialmente ciò che fa un UNION in SQLite, ma con tabelle di database invece che gusti di gelato!

Una clausola UNION in SQLite ti permette di combinare i risultati di due o più istruzioni SELECT. È come creare una grande festa dove diversi gruppi di dati possono mescolarsi e formare un nuovo gruppo più grande.

Sintassi di Base

La sintassi di base di un UNION è questa:

SELECT column1, column2, ... FROM table1
UNION
SELECT column1, column2, ... FROM table2;

Analizziamo questo:

  1. Abbiamo due istruzioni SELECT.
  2. Ogni istruzione SELECT può interrogare tabelle diverse.
  3. La parola chiave UNION si inserisce tra queste istruzioni, agendo come un ponte.

Regole Importanti

Prima di immergerci negli esempi, vediamo alcune regole fondamentali per l'uso di UNION:

  1. Il numero e l'ordine delle colonne in tutte le istruzioni SELECT devono essere gli stessi.
  2. I tipi di dati delle colonne corrispondenti dovrebbero essere compatibili.
  3. Per impostazione predefinita, UNION rimuove le righe duplicate (vedremo come modificare questo più tardi).

UNION in Azione

Creiamo alcune tabelle di esempio e vediamo l'UNION in azione!

-- Creare e popolare la tabella 'employees'
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT
);

INSERT INTO employees (name, department) VALUES
('Alice', 'HR'),
('Bob', 'IT'),
('Charlie', 'Finance');

-- Creare e popolare la tabella 'contractors'
CREATE TABLE contractors (
id INTEGER PRIMARY KEY,
name TEXT,
department TEXT
);

INSERT INTO contractors (name, department) VALUES
('David', 'Marketing'),
('Eve', 'IT'),
('Frank', 'HR');

Ora, usiamo UNION per combinare queste tabelle:

SELECT name, department FROM employees
UNION
SELECT name, department FROM contractors;

Questa query restituirà:

Alice    HR
Bob      IT
Charlie  Finance
David    Marketing
Eve      IT
Frank    HR

Cosa è successo qui? La clausola UNION ha combinato i risultati da entrambe le tabelle, dando noi una lista completa di tutti i lavoratori (dipendenti e collaboratori) senza duplicati.

La Magia della Deduplicazione

Hai notato qualcosa di interessante? Anche se abbiamo due persone nel dipartimento HR (Alice e Frank), entrambi appaiono nei nostri risultati. Questo perché UNION rimuove automaticamente le righe duplicate basandosi su tutti i valori delle colonne.

Se avessimo qualcuno con lo stesso nome e dipartimento in entrambe le tabelle, UNION бы бы 显示arli solo una volta. Per esempio:

INSERT INTO contractors (name, department) VALUES ('Alice', 'HR');

SELECT name, department FROM employees
UNION
SELECT name, department FROM contractors;

Questo ci darebbe lo stesso risultato di prima, senza un'extra 'Alice' in HR.

La Clausola UNION ALL

A volte, potresti voler mantenere tutte le righe, anche se sono duplicate. È qui che entra in gioco UNION ALL. È come dire al database: "Voglio tutti alla festa, anche se hanno un gemello!"

Modifichiamo la nostra query precedente:

SELECT name, department FROM employees
UNION ALL
SELECT name, department FROM contractors;

Ora otteniamo:

Alice    HR
Bob      IT
Charlie  Finance
David    Marketing
Eve      IT
Frank    HR
Alice    HR

Vedi come ora abbiamo due voci per Alice in HR? UNION ALL mantiene tutte le righe, indipendentemente dalle duplicazioni.

Applicazioni Pratiche

UNION e UNION ALL non sono solo per divertimento - hanno applicazioni nel mondo reale! Ecco alcuni scenari dove potresti usarli:

  1. Combinare dati da tabelle con strutture simili (come i nostri esempi di dipendenti e collaboratori).
  2. Creare rapporti che coprono periodi di tempo o categorie diverse.
  3. Unire dati da database o fonti di dati diverse.

Vediamo un esempio più complesso. Immagina di gestire una libreria e di voler vedere tutte le transazioni, sia acquisti che resi:

-- Creare e popolare la tabella 'purchases'
CREATE TABLE purchases (
id INTEGER PRIMARY KEY,
book_title TEXT,
amount DECIMAL(10, 2),
transaction_date DATE
);

INSERT INTO purchases (book_title, amount, transaction_date) VALUES
('The Great Gatsby', 15.99, '2023-06-01'),
('To Kill a Mockingbird', 12.50, '2023-06-02'),
('1984', 10.99, '2023-06-03');

-- Creare e popolare la tabella 'returns'
CREATE TABLE returns (
id INTEGER PRIMARY KEY,
book_title TEXT,
amount DECIMAL(10, 2),
transaction_date DATE
);

INSERT INTO returns (book_title, amount, transaction_date) VALUES
('The Great Gatsby', -15.99, '2023-06-05'),
('Pride and Prejudice', -14.99, '2023-06-06');

-- Combinare acquisti e resi
SELECT book_title, amount, transaction_date, 'Purchase' as transaction_type
FROM purchases
UNION ALL
SELECT book_title, amount, transaction_date, 'Return' as transaction_type
FROM returns
ORDER BY transaction_date;

Questa query ci darà:

The Great Gatsby       15.99   2023-06-01  Purchase
To Kill a Mockingbird  12.50   2023-06-02  Purchase
1984                   10.99   2023-06-03  Purchase
The Great Gatsby      -15.99   2023-06-05  Return
Pride and Prejudice   -14.99   2023-06-06  Return

Qui, abbiamo usato UNION ALL per combinare acquisti e resi, aggiunto una colonna per distinguere tra tipi di transazione e ordinato i risultati per data.

Consigli e Trucchi

  1. Ordinamento dei Risultati: Puoi aggiungere una clausola ORDER BY alla fine della tua query UNION per ordinare i risultati combinati.

  2. Filtraggio dei Risultati Combinati: Usa una clausola WHERE in ogni istruzione SELECT per filtrare le tabelle individuali, o avvolgi la tua query UNION in una subquery e applichi una clausola WHERE per filtrare i risultati combinati.

  3. Alias delle Colonne: Se le colonne hanno nomi diversi in tabelle diverse, puoi usare alias per farli coincidere:

SELECT name AS person, department FROM employees
UNION
SELECT contractor_name AS person, dept AS department FROM contractors;
  1. Combinare Più di Due Tabelle: Non sei limitato a solo due tabelle - puoi concatenare più UNION o UNION ALL clausole per combinare molte tabelle.

Metodi Comuni

Ecco una tabella che riassume i metodi comuni relativi a UNION in SQLite:

Metodo Descrizione Esempio
UNION Combina i risultati di due o più istruzioni SELECT e rimuove i duplicati SELECT * FROM table1 UNION SELECT * FROM table2
UNION ALL Combina i risultati di due o più istruzioni SELECT e mantiene tutte le righe, inclusi i duplicati SELECT * FROM table1 UNION ALL SELECT * FROM table2
ORDER BY Usato con UNION per ordinare i risultati combinati (SELECT * FROM table1 UNION SELECT * FROM table2) ORDER BY column_name
WHERE Usato nelle singole istruzioni SELECT per filtrare i risultati prima di combinare SELECT * FROM table1 WHERE condition UNION SELECT * FROM table2 WHERE condition

Eccoci, ragazzi! Hai appena migliorato le tue competenze SQLite padroneggiando la clausola UNION. Ricorda, la pratica fa la perfezione, quindi non aver paura di sperimentare con queste query sui tuoi dataset. Buona query e che le tue UNION siano sempre successful!

Credits: Image by storyset