Zamiast tworzyć bardzo rozbudowane warunki where w zapytaniu select, można podzielić kwerendę na kilka mniejszych, łatwiejszych w utrzymaniu zapytań SQL i połączyć je za pomocą operatora union lub union all. Wartości odczytane po operatorze union są doklejane do poprzedniego wyniku zapytania select.
select nazwy_kolumn from tabela1
union lub union all
select nazwy_kolumn from tabela2
Uwaga: W przypadku, jeśli wartości drugiego zapytania nie będą mogły być doklejone do pierwszego, to zostanie zwrócony błąd. Taka sytuacja może wystąpić w skutek niegodności ilości kolumn oraz ich typów.
Różnica między union oraz union all polega na tym, że duplikaty rekordów zostaną usunięte przed zwróceniem wartości. Union all spowoduje pozostawianie zdublowanych rekordów. Nazwy zwracanych rekordów zostaną przepisane z pierwszego wyrażenia select.
Można napisać kwerendę z kilkoma użyciami union. W praktyce taka sytuacja świadczy o słabym zrozumieniu danych przechowywanych w bazie i lepszym pomysłem będzie poprawienie tego. Pozbycie się operatorów union powinno w odczuwalny sposób wpłynąć na czas odczytu danych z bazy danych.
Uwaga: Nie zalecam mieszania union oraz union all w jednej kwerendzie. Można uzyskać ciekawe rezultaty oraz błędy logiczne. Użycie union jako ostatniego spowoduje usunięcie duplikatów z poprzednich rezultatów. Dokładnie tak, jak użycie operatora distinct.
Uwaga: Zalecam stosować union all wszędzie tam, gdzie nie występują duplikaty. Kod SQL będzie wykonywany szybciej, ponieważ nie jest wykonywany krok usuwania duplikatów,
Przykłady:
Dla danych w tabeli items:

Łączenie różnych wartości:
Możemy dodać rekordy zwracane poprzez zapytanie select, nie modyfikując tabeli items. używając kodu:
select * from items
union all
select 5, 'kubek'
Wynikiem działania kodu będzie zwrócona zawartość tabeli items wraz z nową wartością:

Kod z użyciem union zwróci dokładnie takie same rezultaty.
Porównanie działania union oraz union all:
Połączmy dokładnie dwa takie same rezultaty, czyli kwerendy select do tej samej tabeli.
Union all:
select * from items
union all
select * from items
Zwróci rezultaty:

Union:
select * from items
union
select * from items
Zwróci rezultatu:

Kod drugiego zapytania wyeliminował duplikaty rekordów.
Łączenie różnych danych:
Operator union można wykorzystać także do łączenia różnych wyników. Jedynym warunkiem jest to, że ostatecznie zwracane typy muszą być zgodne z wynikiem pierwszego zapytania:
Dodatkowo użyjmy tabelki users:

Możemy wykonać następujący kod:
select id, name from items
union
select id, cast(dt_create as varchar) from users
Da to następujące rezultaty:
