MySQL UNIA – Kompletny samouczek
Co to jest Unia?
Związki łączą wyniki wielu zapytań SELECT w skonsolidowany zestaw wyników.
Jedynym wymaganiem, aby to zadziałało, jest to, że liczba kolumn we wszystkich zapytaniach SELECT, które należy połączyć, powinna być taka sama.
Załóżmy, że mamy dwie tabele w następujący sposób
Utwórzmy teraz zapytanie UNION, aby połączyć obie tabele za pomocą DISTINCT
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
Tutaj zduplikowane wiersze są usuwane i zwracane są tylko unikalne wiersze.
Uwaga: MySQL używa klauzuli DISTINCT jako domyślnej podczas wykonywania zapytań UNION, jeśli nic nie jest określone.
Utwórzmy teraz zapytanie UNION, aby połączyć obie tabele za pomocą ALL
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Tutaj uwzględnione są zduplikowane wiersze i ponieważ używamy ALL.
Dlaczego warto używać Unii?
Załóżmy, że w projekcie bazy danych występuje błąd i używasz dwóch różnych tabel przeznaczonych do tego samego celu. Chcesz skonsolidować te dwie tabele w jedną, pomijając wszelkie zduplikowane rekordy przedostające się do nowej tabeli. W takich przypadkach możesz użyć UNION.
Podsumowanie
- Polecenie UNION służy do łączenia więcej niż jednego wyniku zapytania SELECT w jedno zapytanie zawierające wiersze ze wszystkich zapytań wybierających.
- Liczba kolumn i typów danych w pliku WYBIERZ instrukcje muszą być takie same, aby polecenie UNION mogło działać.
- Klauzula DISTINCT służy do eliminowania zduplikowanych wartości ze zbioru wyników zapytania UNION. MySQL używa klauzuli DISTINCT jako domyślnej podczas wykonywania zapytań UNION, jeśli nic nie jest określone.
- Klauzula ALL służy do zwrócenia wszystkich, nawet zduplikowanych wierszy w zapytaniu UNION.
Praktyczne przykłady użycia MySQL Workbench
W naszym myFlixDB połączmy
numer_członkostwa i pełne imię i nazwisko z tabeli Członkowie
w
identyfikator_filmu i tytuł z tabeli filmów
Możemy użyć następującego zapytania
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
Wykonanie powyższego skryptu w MySQL Workbench w stosunku do myflixdb daje nam następujące wyniki pokazane poniżej.
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 |