Operator UNION – operator w języku SQL łączący rezultaty dwóch zapytań w jedną tabelę (bądź inną postać wyniku) zawierającą wszystkie pasujące do nich wiersze. Oba zapytania biorące udział w złączeniu muszą generować jednakową liczbę kolumn o odpowiednio kompatybilnych typach danych. Zdublowane rekordy są automatycznie usuwane, z wyjątkiem sytuacji, w której zostało użyte UNION ALL .
Operator UNION może być użyteczny w bazodanowych aplikacjach magazynowych, w których tabele nie są perfekcyjnie unormowane. Prostym przykładem niech będzie baza danych zawierająca tabele sales2005 oraz sales2006, które posiadają identyczną strukturę ale są rozseparowane ze względu na reprezentowane wyniki. Zapytanie UNION powinno połączyć wyniki z obydwu tabel.
UNION nie gwarantuje uporządkowania wierszy. Wiersze z drugiego operandu mogą pojawiać się przed, po, lub pomieszane z wierszami z pierwszego operandu. W razie potrzeby specjalnego uporządkowania, należy użyć ORDER BY.
UNION ALL może być zdecydowanie szybsze niż zwykłe UNION. UNION ALL jest techniką stosowaną do zarządzania serwisowania i tworzenia w środowiskach magazynowych o dużej ilości danych. Chroni ona programistów przed koniecznością tworzenia czasochłonnych projektów bazodanowych. Bazy danych mogą mieć bardzo niejednorodny tzw. bieżący przedział czasowy (np. porcja miesięczna lub dzienna), a starsze dane bywają rzadko uaktualniane. Używające różnych nośników pamięci, obszarów tablicowych, tabel, i definicji indeksów, ustawienia mogą być zestrojone w celu uzyskania specyficznych wyników dla różnych poziomów zmienności i częstotliwości uaktualnień.
W bazach danych MS SQL oraz IBM DB2 operator UNION ALL jest elementem tworzącym zapytania rekurencyjneIBM Information Center
Przykłady zastosowań Dane są następujące dwie tabele:
+sales2005 person amount Joe 1000 Alex 2000 Bob 5000
+sales2006 person amount Joe 2000 Alex 2000 Zach 35000
Użycie następującej sekwencji:
SELECT * FROM sales2005 UNION SELECT * FROM sales2006;
przyniesie następujący zestaw rezultatów, jednak kolejność wierszy może być różna ponieważ nie dołączono klauzuli ORDER BY:
person amount Joe 1000 Alex 2000 Bob 5000 Joe 2000 Zach 35000
Warto zauważyć, że są dwa wiersze z Joe ponieważ różnią się one w kolumnie amount. Jest tylko jeden wiersz z Alexem bo w obu tabelach wiersze te nie różnią się.
UNION ALL daje inne rezultaty, ponieważ nie eliminuje duplikatów. Uruchamiając sekwencję:
SELECT * FROM sales2005 UNION ALL SELECT * FROM sales2006;
można otrzymać następujące rezultaty, ponownie zawierające pomieszane dane z powodu braku rozszerzenia ORDER BY:
person amount Joe 1000 Joe 2000 Alex 2000 Alex 2000 Bob 5000 Zach 35000
Przypisy
Kategoria:SQL