Jak działa UNION w języku SQL? Przykłady zastosowania

Jak działa UNION w języku SQL? Przykłady zastosowania

Jeśli kiedykolwiek musiałem połączyć wyniki z dwóch różnych zapytań SQL, bez duplikowania powtarzających się rekordów, to jednym z moich podstawowych narzędzi był operator UNION. Jest to potężne narzędzie dostępne w SQL, które pozwala na scalenie wyników z kilku tabel w jedną znormalizowaną listę.

Co to jest UNION w SQL?

Operator UNION w SQL służy do łączenia wyników dwóch lub więcej instrukcji SELECT. Ważną cechą UNION jest to, że automatycznie usuwa duplikaty z wyniku końcowego. Oznacza to, że jeśli w obu zapytaniach znajdują się te same rekordy, finalny wynik będzie zawierał tylko jedną ich wystąpienie.

Jak działa UNION w języku SQL? Przykłady zastosowania

Aby użyć UNION, muszę spełnić kilka podstawowych warunków:

  • Każde zapytanie SELECT musi zwracać tę samą liczbę kolumn.
  • Typy danych w odpowiednich kolumnach muszą być kompatybilne.
  • Kolejność kolumn w każdym zapytaniu musi być taka sama.

Podstawowy przykład użycia UNION

Spójrzmy na prosty przykład:

SELECT imie, nazwisko FROM pracownicy
UNION
SELECT imie, nazwisko FROM klienci;

W powyższym przypadku wyniki pochodzące z tabeli pracownicy oraz klienci zostaną połączone w jedną listę, zawierającą unikalne imiona i nazwiska.

UNION vs UNION ALL – jaka jest różnica?

Warto zaznaczyć istotną różnicę pomiędzy UNION a UNION ALL. Standardowy UNION usuwa duplikaty, co może mieć wpływ na wydajność zapytania. Jeśli zależy mi na zachowaniu wszystkich rekordów, także tych zduplikowanych, wtedy stosuję UNION ALL.

SELECT imie, nazwisko FROM pracownicy
UNION ALL
SELECT imie, nazwisko FROM klienci;

W tej wersji wynik będzie zawierał wszystkie rekordy z obu zapytań – również te powtarzające się.

Kiedy warto korzystać z UNION?

Na co dzień stosuję UNION w wielu sytuacjach, ale szczególnie przydaje się, gdy:

  1. Muszę połączyć podobne zbiory danych z różnych tabel.
  2. Chcę stworzyć jednolitą listę unikalnych wpisów z różnych źródeł.
  3. Analizuję dane pochodzące z różnych systemów operacyjnych, które nie są jeszcze w pełni zintegrowane.

Przykład z warunkami filtrującymi

Nie zawsze interesuje mnie wszystkie dane, więc mogę zastosować warunki w każdej części zapytania:

SELECT imie, nazwisko FROM pracownicy WHERE stanowisko = 'Programista'
UNION
SELECT imie, nazwisko FROM klienci WHERE kraj = 'Polska';

Wynik to lista imion i nazwisk programistów z tabeli pracownicy oraz klientów z Polski z tabeli klienci.

Wydajność zapytań UNION

Chociaż UNION jest niesamowicie przydatny, ma swoją cenę jeśli chodzi o wydajność. SQL musi porównać wyniki i usunąć duplikaty, co może być czasochłonne przy dużych zbiorach danych. Jeśli wiem, że duplikaty nie są problemem, zawsze wybieram UNION ALL, który działa szybciej.

Porównanie UNION i JOIN

Na początku nauki SQL często zastanawiałem się, jaka jest różnica między UNION a JOIN. Chociaż oba służą do łączenia danych, działają zupełnie inaczej:

Cecha UNION JOIN
Sposób łączenia Łączy wyniki dwóch zapytań w jeden zbiór Łączy wiersze na podstawie wspólnych wartości
Kolumny Musi mieć tę samą liczbę kolumn Może łączyć różne zestawy kolumn
Redundancja danych Usuń duplikaty (chyba że używasz UNION ALL) Może generować duplikaty, jeśli istnieją powiązania jeden-do-wielu

Podsumowanie

Operator UNION w SQL to świetne narzędzie do łączenia wyników z różnych zapytań w jeden unikalny zbiór danych. Jeśli nie potrzebuję eliminowania duplikatów, warto rozważyć UNION ALL, aby zwiększyć wydajność zapytań. Kluczowe jest także rozumienie różnicy między UNION a JOIN, ponieważ każde z tych narzędzi sprawdza się w innych przypadkach.

 

Inny ciekawy artykuł:

Jak działa SELF JOIN w języku SQL? Przykłady zastosowania

KajoDataSpace