Oracle
 sql >> Base de données >  >> RDS >> Oracle

Explication de l'opérateur Oracle UNION

Dans Oracle Database, le UNION nous permet de combiner les résultats de deux requêtes en un seul ensemble de résultats.

Exemple

Supposons que nous ayons les tables suivantes :

SELECT * FROM Teachers;
SELECT * FROM Students;

Résultat :

TEACHERID NOM DE L'ENSEIGNANT
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Facture
6 Facture
ID ÉTUDIANT NOM DE L'ÉTUDIANT
1 Faye
2 Jet
3 Pointe
4 Ein
5 Warren
6 Facture

Voici un exemple d'utilisation de l'UNION opérateur pour renvoyer les noms de tous les enseignants et élèves :

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Résultat :

NOM DE L'ENSEIGNANT
Ben
Facture
Cathy
Ein
Faye
Jet
Pointe
Warren

Par défaut, le UNION l'opérateur applique implicitement un DISTINCT opération. En d'autres termes, il ne renvoie que des valeurs distinctes par défaut. Ainsi, les résultats ci-dessus contiennent un seul chacun de Warren, Cathy et Bill. Ceci malgré le fait que les tables combinées contiennent en fait deux Warrens, deux Cathys et trois Bills (il y a deux enseignants appelés Cathy, un enseignant et un client appelé Warren, et deux appelés Bill, ainsi qu'un étudiant appelé Bill).

Inclure les doublons

Nous pouvons utiliser le ALL mot-clé pour inclure les valeurs en double dans les résultats :

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Résultat :

NOM DE L'ENSEIGNANT
Warren
Ben
Cathy
Cathy
Facture
Facture
Faye
Jet
Pointe
Ein
Warren
Facture

Cette fois, nous avons eu douze lignes au lieu des huit que nous avions dans notre premier exemple.

Nous pouvons voir que les deux Cathys ont été retournées et les trois Bills ont été retournés.

Quelques choses à retenir

Notez que les expressions doivent correspondre en nombre et doivent appartenir au même groupe de types de données. Par conséquent, nous ne pouvons pas effectuer les actions suivantes :

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

Résultat :

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

Ou ceci :

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Résultat :

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

Cependant, nous pouvons utiliser des fonctions comme TO_CHAR() pour convertir une colonne en un groupe de types de données approprié :

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

Résultat :

TEACHERNAME
1
2
3
4
5
6
Ben
Bill
Cathy
Warren