Łączenie wyników zapytań
W języku SQL istnieją mechanizmy, które pozwalają łączyć wyniki kilku zapytań. Do połączenia zapytań można użyć jednej z trzech instrukcji: UNION, INTERSECT, EXCEPT.
Instrukcja UNION
Instrukcja UNION łączy wyniki zapytań i ma postać:
zapytanie1 UNION zapytanie2
Warunkiem wykonania instrukcji jest, aby łączone zapytania miały taką samą liczbę kolumn oraz aby typy kolumn były takie same.
Przykład
SELECT nazwisko, imię FROM Klient WHERE miejscowość=”Przeworsk” UNION SELECT nazwisko, imię FROM Klient WHERE miejscowość=”Rzeszów”;
Pierwsze zapytanie zwróci listę klientów z Przeworska, drugie z Rzeszowa. Wynikiem połączenia zapytań będzie lista klientów z Przeworska i z Rzeszowa.
Instrukcja UNION domyślnie powoduje usunięcie powtarzających się wierszy. W celu zachowania w wyniku wszystkich wierszy należy użyć instrukcji UNION ALL. Takie użycie instrukcji spowoduje dużo szybsze zwrócenie wyniku, ponieważ nie wymaga wyszukiwania
i usuwania powtarzających się wierszy.
Instrukcja UNION lub UNION ALL może zastępować w zapytaniu operator OR.
SELECT nazwisko, imię FROM Klient WHERE miejscowość='Przeworsk' OR miejscowość='Rzeszów';
Instrukcja INTERSECT
Instrukcja INTERSECT zwraca część wspólną wyników dwóch zapytań i ma postać:
zapytanie1 INTERSECT zapytanie2
Podobnie jak poprzednio, obydwa zapytania powinny zwracać taką samą liczbę kolumn o takich samych typach (UWAGA: nie zadziała pod MS Access)
Przykład
SELECT nazwisko, imię FROM Klient WHERE telefon is null INTERSECT SELECT nazwisko, imię FROM Klient WHERE adres_e_mail is null;
Instrukcja INTERSECT zwróci dane klientów, którzy nie podali numeru telefonu ani adresu e-mail.
Instrukcja EXCEPT
Instrukcja EXCEPT ma postać:
zapytanie1 EXCEPT zapytanie2
Zwraca te wiersze, które wystąpiły w wyniku pierwszego zapytania, ale nie było ich
w wyniku drugiego zapytania. Zmiana kolejności zapytań w tej instrukcji spowoduje zmianę wyniku. (UWAGA: nie zadziała pod MS Access)
Przykład
SELECT nazwisko, imię FROM Klient WHERE miejscowość='Przeworsk' EXCEPT SELECT nazwisko, imię FROM Klient WHERE telefon is not null;
Instrukcja EXCEPT zwróci klientów, którzy mieszkają w Przeworsku i podali numer telefonu.