W PostgreSQL UNION
operator łączy wyniki z wielu zapytań w jeden zestaw wyników.
Składnia
Oficjalna składnia wygląda następująco:
query1 UNION [ALL] query2
UNION
operator dołącza wynik query2
do wyniku query1
(chociaż nie ma gwarancji, że jest to kolejność, w jakiej wiersze są faktycznie zwracane).
Zduplikowane wiersze są eliminowane, chyba że UNION ALL
jest używany.
Przykład
Załóżmy, że mamy następujące tabele:
SELECT * FROM Teachers;
SELECT * FROM Students;
Wynik:
teacherid | teachername -----------+------------- 1 | Warren 2 | Ben 3 | Cathy 4 | Cathy 5 | Bill 6 | Bill studentid | studentname -----------+------------- 1 | Faye 2 | Jet 3 | Spike 4 | Ein 5 | Warren 6 | Bill
Możemy użyć UNION
operator, aby zwrócić wszystkich nauczycieli i uczniów:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Wynik:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Domyślnie UNION
operator domyślnie stosuje DISTINCT
operacja. Innymi słowy, domyślnie zwraca tylko różne wartości. Tak więc powyższe wyniki zawierają tylko po jednym z Warrena, Cathy i Billa. Dzieje się tak pomimo faktu, że połączone tabele faktycznie zawierają dwa Warrens, dwie Cathys i trzech Billów (jest dwóch nauczycieli o imieniu Cathy, nauczyciel i klient o imieniu Warren i dwóch o imieniu Bill, a także jeden uczeń o imieniu Bill).
Oto przykład, który jawnie używa DISTINCT
operator:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Wynik:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Ten sam wynik.
Dołącz duplikaty
Możemy użyć ALL
słowo kluczowe, aby uwzględnić zduplikowane wartości w wynikach:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Wynik:
teachername ------------- Warren Ben Cathy Cathy Bill Bill Faye Jet Spike Ein Warren Bill (12 rows)
Tym razem otrzymaliśmy dwanaście wierszy zamiast ośmiu, które otrzymaliśmy w naszym pierwszym przykładzie.
Widzimy, że obie Cathys zostały zwrócone i wszystkie trzy rachunki zostały zwrócone.