TOP

Lekcja SQL 12. Zapytania łączone (UNION)

Większość zapytań SQL używa pojedynczej instrukcji, która zwraca dane z jednej lub większej liczby tabel. SQL umożliwia także jednoczesne uruchamianie wielu oddzielnych zapytań i wyświetlanie wyników w postaci pojedynczego zestawu danych. Takie połączone zapytania są zwykle nazywane złączeniami lub zapytaniami złożonymi.


1. Użycie operatora UNION

Zapytania SQL są łączone przy użyciu operatora UNION. Aby to zrobić, musisz określić każde żądanie SELECT i umieścić między nimi słowo kluczowe UNION. Nie ma ograniczeń co do liczby zastosowań operatora UNION w jednym zapytaniu ogólnym. W poprzedniej sekcji zauważyliśmy, że MS Access nie ma możliwości utworzenia pełnej unii zewnętrznej, teraz zobaczymy, jak można to osiągnąć za pomocą operatora UNION.

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

Widzimy, że zapytanie wyświetliło zarówno wszystkie kolumny z pierwszej tabeli, jak i z drugiej, niezależnie od tego, czy wszystkie rekordy mają odpowiedniki w innej tabeli.

Warto też zaznaczyć, że w wielu przypadkach zamiast UNION możemy zastosować klauzulę WHERE z wieloma warunkami i uzyskać podobny wynik. Jednak dzięki UNION zapisy wyglądają bardziej zwięźle i przejrzyście.

Podczas pisania zapytań łączonych konieczne jest również przestrzeganie pewnych zasad:

  • żądanie UNION musi zawierać dwa lub więcej operatorów SELECT oddzielonych słowem kluczowym UNION (tzn. jeśli w żądaniu użyte są cztery operatory SELECT, to muszą być trzy słowa kluczowe UNION);
  • każde zapytanie w operatorze UNION musi mieć te same kolumny, wyrażenia lub funkcje statystyczne, które ponadto muszą być wymienione w tej samej kolejności;
  • typy danych kolumn muszą być kompatybilne. Nie muszą być koniecznie tego samego typu, ale muszą mieć podobny typ, aby DBMS mógł je jednoznacznie przekonwertować (przykładowo mogą to być różne typy danych liczbowych lub różne typy dat).
  • 2. Dołącz lub wyklucz powtarzające się linie

    Zapytanie zawierające UNION automatycznie usuwa wszystkie zduplikowane wiersze ze zbioru wyników zapytania (innymi słowy, zachowuje się jak klauzula WHERE z wieloma warunkami w jednej instrukcji SELECT). Jest to domyślne zachowanie operatora UNION, ale możemy je zmienić, jeśli chcemy. W tym celu powinniśmy użyć operatora UNION ALL zamiast UNION.

    3. Sortowanie wyników połączonych zapytań

    Wyniki instrukcji SELECT są sortowane przy użyciu instrukcji ORDER BY. Łącząc zapytania za pomocą UNION, można zastosować tylko jedną klauzulę ORDER BY, która musi być umieszczona w ostatniej instrukcji SELECT. Rzeczywiście, w praktyce nie ma większego sensu sortowanie części wyników w jednej kolejności, a drugiej w innej. Dlatego wielokrotne zdania ORDER BY są niedozwolone.