Co to jest związek?
Związki łączą wyniki z wielu zapytań SELECT w skonsolidowany zestaw wyników.
Jedynym wymaganiem, aby to zadziałało, jest to, że liczba kolumn powinna być taka sama we wszystkich zapytaniach SELECT, które należy połączyć.
Załóżmy, że mamy dwie tabele w następujący sposób
Utwórzmy teraz zapytanie UNION, aby połączyć obie tabele przy użyciu funkcji DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT 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 przy użyciu ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Tutaj uwzględniono zduplikowane wiersze, a ponieważ używamy ALL.
Dlaczego warto korzystać ze związków zawodowych
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 zduplikowane rekordy przed wkradaniem 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 instrukcjach SELECT musi być taka sama, aby polecenie UNION działało.
- Klauzula DISTINCT służy do eliminacji zduplikowanych wartości z zestawu 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 zwracania wszystkich, nawet zduplikowanych wierszy w zapytaniu UNION.
Praktyczne przykłady z wykorzystaniem Środowiska pracy MySQL
W naszym myFlixDB połączmy
Members_number i full_names z tabeli Members
z
movie_id i title z tabeli filmów
Możemy użyć następującego zapytania
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Wykonanie powyższego skryptu w środowisku MySQL na 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 |