Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyjaśnienie operatora Oracle UNION

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać porównanie dwóch kolumn jako jednej kolumny w Oracle?

  2. Normalizuj dane transakcji od kolumn czasu i statusu do minut na wartość statusu

  3. Nie można zalogować się do bazy danych jako SYS za pomocą Oracle SQL Developer

  4. Zły tryb gotowości

  5. Jak przekazać parametr logiczny do procedury Oracle C#