Oracle
 sql >> Database >  >> RDS >> Oracle

Spiegazione dell'operatore Oracle UNION

In Oracle Database, il UNION operatore ci consente di combinare i risultati di due query in un unico set di risultati.

Esempio

Supponiamo di avere le seguenti tabelle:

SELECT * FROM Teachers;
SELECT * FROM Students;

Risultato:

INSEGNANTE NOME INSEGNANTE
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Fattura
6 Fattura
STUDENTID STUDENTNAME
1 Fai
2 Jet
3 Punta
4 In
5 Warren
6 Fattura

Ecco un esempio di utilizzo di UNION operatore per restituire i nomi di tutti i docenti e studenti:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Risultato:

NOME INSEGNANTE
Ben
Fattura
Cathy
Ein
Fai
Jet
Punta
Warren

Per impostazione predefinita, il UNION l'operatore applica implicitamente un DISTINCT operazione. In altre parole, restituisce solo valori distinti per impostazione predefinita. Quindi i risultati di cui sopra contengono solo uno ciascuno di Warren, Cathy e Bill. Questo nonostante il fatto che le tabelle combinate contengano effettivamente due Warren, due Cathy e tre Bill (ci sono due insegnanti chiamate Cathy, un'insegnante e un cliente chiamato Warren, e due chiamate Bill, oltre a uno studente chiamato Bill).

Includi duplicati

Possiamo usare il ALL parola chiave per includere valori duplicati nei risultati:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Risultato:

NOME INSEGNANTE
Warren
Ben
Cathy
Cathy
Fattura
Fattura
Fai
Jet
Punta
Ein
Warren
Fattura

Questa volta abbiamo ottenuto dodici righe invece delle otto che abbiamo ottenuto nel nostro primo esempio.

Possiamo vedere che entrambi i Cathy sono stati restituiti e tutti e tre i Bill sono stati restituiti.

Alcune cose da ricordare

Si noti che le espressioni devono corrispondere in numero e devono trovarsi nello stesso gruppo di tipi di dati. Pertanto, non possiamo fare quanto segue:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Risultato:

ORA-01789: query block has incorrect number of result columns

O questo:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Risultato:

ORA-01790: expression must have same datatype as corresponding expression

Tuttavia, possiamo usare funzioni come TO_CHAR() per convertire una colonna in un gruppo di tipi di dati adatto:

SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

Risultato:

TEACHERNAME
1
2
3
4
5
6
Ben
Bill
Cathy
Warren