Menu
Coddy logo textTech

UNION

Fa parte della sezione Fondamenti del percorso SQL di Coddy. Lezione 48 di 72.

Le unioni sono diverse dai join. I join utilizzano condizioni per combinare le tabelle, mentre le unioni semplicemente aggiungono una tabella sopra l'altra. Per usare UNION scriveremo:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

Entrambe le query SELECT devono rispettare le seguenti regole:

  • Il numero di campi deve essere uguale
  • L’ordine è importante
  • Le colonne nella stessa posizione devono avere tipi di dati corrispondenti

Ad esempio, supponiamo di avere le seguenti tabelle:

germany_people

idname
1Lena
2Leonie

england_people

idname
1George
2Lena

Problema: vogliamo creare un'unica grande tabella con tutti i nomi che abbiamo.

SELECT name from germany_people
UNION
SELECT name from england_people

Risultato:

name
Lena
Leonie
George

UNION restituisce solo valori distinti, mentre UNION ALL restituisce tutti i record così come sono:

SELECT name from germany_people
UNION ALL
SELECT name from england_people

Risultato:

name
Lena
Leonie
George
Lena

Puoi anche combinare UNION ALL con le funzioni di aggregazione, GROUP BY e ORDER BY per riepilogare i dati di più tabelle. Il trucco consiste nell racchiudere UNION ALL in una sottoquery, quindi applicare il raggruppamento e l'ordinamento.

Ad esempio, supponiamo di voler contare quante volte compare ciascun nome in entrambe le tabelle:

SELECT name, COUNT(*) AS total_count
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESC

Risultato:

nametotal_count
Lena2
Leonie1
George1

Qui si usa UNION ALL (non UNION) per mantenere i duplicati come Lena. Altrimenti verrebbero rimossi prima del conteggio. La sottoquery unisce tutte le righe e poi GROUP BY + COUNT le riepilogano. ORDER BY ordina il risultato finale.

challenge icon

Sfida

Facile

Tabelle e colonne disponibili:

  • sales_2009: product_id, quantity_sold
  • sales_2010: product_id, quantity_sold
  • sales_2011: product_id, quantity_sold

Ci sono 3 tabelle delle vendite.

Trova la somma delle vendite per ciascun prodotto considerando tutte le tabelle insieme.

Il risultato deve includere product_id e il totale delle vendite.

Assegna a questa colonna il nome total_sales.

Ordina i risultati in base al totale delle vendite in ordine decrescente.

Provalo tu

-- Unisci le tre tabelle in un unico risultato, mantenendo tutte le righe
SELECT product_id, ____ AS total_sales
FROM (
    SELECT * FROM sales_2009
    ____
    SELECT * FROM sales_2010
    ____
    SELECT * FROM sales_2011
)
-- Una riga per prodotto, con il totale più alto per primo
GROUP BY ____
ORDER BY ____ DESC;
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground SQL