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 table2Entrambe 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
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
Problema: vogliamo creare un'unica grande tabella con tutti i nomi che abbiamo.
SELECT name from germany_people
UNION
SELECT name from england_peopleRisultato:
| 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_peopleRisultato:
| 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 DESCRisultato:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
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.
Sfida
FacileTabelle e colonne disponibili:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_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;Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Altre parole chiave
La parola chiave INLa parola chiave BETWEENLa parola chiave LIKELa parola chiave ASRiepilogo - Modelli di telefoni cellulari2Condizioni
Basi delle condizioniLa parola chiave ANDLa parola chiave ORLa parola chiave NOTCombinare più condizioniParentesiValori booleani5Operazioni aritmetiche
Operatori matematiciColonne matematicheL’operazione moduloLa funzione ROUND()3Formato di restituzione specifico
Valori nullOrdinare i risultati Parte 1Ordinare i risultati Parte 2Riepilogo - Azienda di sicurezza informaticaLimitare il numero di recordRiepilogo - Fabbrica di veicoli6Sfide introduttive
Ripasso - Elezione parlamentareRipasso - Arresto di un criminale da parte della poliziaRipasso - Contenitore per bevande da barRipasso - Progetta nuove colonne9Tabelle multiple
JOIN di base, parte 1JOIN di base, parte 2Riepilogo - JOINSelf joinRiepilogo - Self joinUNIONSemplificare le query, parola chiave WITHRiepilogo - Query con WITHRiepilogo - Impresa edile immobiliare12Funzioni finestra, parte 2
Funzioni RANK e DENSE_RANKRipasso: RANK e DENSE_RANKFunzione NTILEFunzioni di aggregazioneCriteri ROWS e RANGEEsercitati da solo: Playground SQL