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.
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:
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.
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.