W bazie danych Oracle UNION operator pozwala nam połączyć wyniki z dwóch zapytań w jeden zestaw wyników.
Przykład
Załóżmy, że mamy następujące tabele:
SELECT * FROM Teachers;
SELECT * FROM Students; Wynik:
| ID NAUCZYCIELA | NAZWISKO NAUCZYCIELA |
|---|---|
| 1 | Warren |
| 2 | Ben |
| 3 | Kasia |
| 4 | Kasia |
| 5 | Rachunek |
| 6 | Rachunek |
| ID UCZNIA | NAZWISKO UCZNIA |
|---|---|
| 1 | Faye |
| 2 | Odrzutowiec |
| 3 | Skok |
| 4 | Ein |
| 5 | Warren |
| 6 | Rachunek |
Oto przykład użycia UNION operator zwraca nazwiska wszystkich nauczycieli i uczniów:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students; Wynik:
| NAZWISKO NAUCZYCIELA |
|---|
| Ben |
| Rachunek |
| Kasia |
| Ein |
| Faye |
| Odrzutowiec |
| Skok |
| Warren |
Domyślnie UNION operator domyślnie stosuje DISTINCT operacja. Innymi słowy, domyślnie zwraca tylko różne wartości. Tak więc powyższe wyniki zawierają tylko po jednym z Warren, Cathy i Bill. Dzieje się tak pomimo faktu, że połączone tabele faktycznie zawierają dwa Warrens, dwie Cathys i trzech Billów (jest dwóch nauczycieli o imieniu Cathy, nauczyciel i klient o imieniu Warren i dwóch o imieniu Bill, a także jeden uczeń o imieniu Bill).
Dołącz duplikaty
Możemy użyć ALL słowo kluczowe, aby uwzględnić zduplikowane wartości w wynikach:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students; Wynik:
| NAZWISKO NAUCZYCIELA |
|---|
| Warren |
| Ben |
| Kasia |
| Kasia |
| Rachunek |
| Rachunek |
| Faye |
| Odrzutowiec |
| Skok |
| Ein |
| Warren |
| Rachunek |
Tym razem otrzymaliśmy dwanaście wierszy zamiast ośmiu, które otrzymaliśmy w naszym pierwszym przykładzie.
Widzimy, że obie Cathys zostały zwrócone i wszystkie trzy rachunki zostały zwrócone.
Niektóre rzeczy do zapamiętania
Należy zauważyć, że wyrażenia muszą być zgodne pod względem liczby i muszą należeć do tej samej grupy typów danych. Dlatego nie możemy wykonać następujących czynności:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; Wynik:
ORA-01789: query block has incorrect number of result columns
Albo to:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students; Wynik:
ORA-01790: expression must have same datatype as corresponding expression
Chociaż możemy używać funkcji takich jak TO_CHAR() aby przekonwertować kolumnę na odpowiednią grupę typów danych:
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students; Wynik:
TEACHERNAME 1 2 3 4 5 6 Ben Bill Cathy Warren