Ce este o uniune?
Sindicatele combină rezultatele de la mai multe interogări SELECT într-un set de rezultate consolidat.
Singurele cerințe pentru ca acest lucru să funcționeze este ca numărul de coloane să fie același din toate interogările SELECT care trebuie combinate.
Să presupunem că avem două tabele după cum urmează
Să creăm acum o interogare UNION pentru a combina ambele tabele folosind DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Aici rândurile duplicate sunt eliminate și se returnează numai rândurile unice.
Notă: MySQL folosește clauza DISTINCT ca implicită atunci când execută interogări UNION dacă nu este specificat nimic.
Să creăm acum o interogare UNION pentru a combina ambele tabele folosind ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Aici sunt incluse rândurile duplicate și de vreme ce folosim TOATE.
De ce să folosim sindicatele
Să presupunem că există un defect în proiectarea bazei de date și că utilizați două tabele diferite destinate aceluiași scop. Doriți să consolidați aceste două tabele într-unul, omițând orice înregistrări duplicate de la pătrunderea în noul tabel. Puteți utiliza UNION în astfel de cazuri.
rezumat
- Comanda UNION este utilizată pentru a combina mai multe rezultate ale interogării SELECT într-o singură interogare conținând rânduri din toate interogările selectate.
- Numărul de coloane și tipuri de date din instrucțiunile SELECT trebuie să fie aceleași pentru ca comanda UNION să funcționeze.
- Clauza DISTINCT este utilizată pentru a elimina valorile duplicate din setul de rezultate ale interogării UNION. MySQL folosește clauza DISTINCT ca implicită atunci când execută interogări UNION dacă nu este specificat nimic.
- Clauza ALL este utilizată pentru a returna toate chiar și rândurile duplicate din interogarea UNION.
Exemple practice folosind bancul de lucru MySQL
În myFlixDB permite combinarea
membership_number și full_names din tabelul Members
cu
movie_id și titlul din tabelul de filme
Putem folosi următoarea interogare
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Executarea scriptului de mai sus în MySQL workbench împotriva myflixdb ne oferă următoarele rezultate prezentate mai jos.
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 |