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