Cos'è un'unione?
Le unioni combinano i risultati di più query SELECT in un set di risultati consolidato.
L'unico requisito perché funzioni è che il numero di colonne sia lo stesso per tutte le query SELECT che devono essere combinate.
Supponiamo di avere due tabelle come segue
Creiamo ora una query UNION per combinare entrambe le tabelle utilizzando DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Qui le righe duplicate vengono rimosse e vengono restituite solo righe univoche.
Nota: MySQL utilizza la clausola DISTINCT come impostazione predefinita durante l'esecuzione di query UNION se non viene specificato nulla.
Creiamo ora una query UNION per combinare entrambe le tabelle utilizzando ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Qui sono incluse le righe duplicate e poiché usiamo ALL.
Perché usare i sindacati
Supponiamo che ci sia un difetto nella progettazione del database e che tu stia utilizzando due diverse tabelle pensate per lo stesso scopo. Si desidera consolidare queste due tabelle in una omettendo qualsiasi record duplicato che si insinui nella nuova tabella. È possibile utilizzare UNION in questi casi.
Sommario
- Il comando UNION viene utilizzato per combinare più di un risultato di query SELECT in una singola query contenente righe da tutte le query di selezione.
- Il numero di colonne e tipi di dati nelle istruzioni SELECT deve essere lo stesso affinché il comando UNION funzioni.
- La clausola DISTINCT viene utilizzata per eliminare i valori duplicati dal set di risultati della query UNION. MySQL utilizza la clausola DISTINCT come impostazione predefinita durante l'esecuzione di query UNION se non viene specificato nulla.
- La clausola ALL viene utilizzata per restituire anche tutte le righe duplicate nella query UNION.
Esempi pratici utilizzando MySQL workbench
Nel nostro myFlixDB combiniamo
membership_number e full_names dalla tabella Members
con
movie_id e titolo dalla tabella dei film
Possiamo usare la seguente query
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
L'esecuzione dello script sopra in MySQL workbench su myflixdb ci dà i seguenti risultati mostrati di seguito.
membership_number | full_names |
---|---|
1 | Janet Jones |
2 | Janet Smith Jones |
3 | Robert Phil |
4 | Gloria Williams |
5 | Leonard Hofstadter |
6 | Sheldon Cooper |
7 | Rajesh Koothrappali |
8 | Leslie Winkle |
9 | Howard Wolowitz |
16 | 67% Guilty |
6 | Angels and Demons |
4 | Code Name Black |
5 | Daddy's Little Girls |
7 | Davinci Code |
2 | Forgetting Sarah Marshal |
9 | Honey mooners |
19 | movie 3 |
1 | Pirates of the Caribean 4 |
18 | sample movie |
17 | The Great Dictator |
3 | X-Men |