I Oracle Database, UNION
operatorn låter oss kombinera resultaten från två frågor till en enda resultatuppsättning.
Exempel
Anta att vi har följande tabeller:
SELECT * FROM Teachers;
SELECT * FROM Students;
Resultat:
LÄRARID | LÄRARNAMN |
---|---|
1 | Warren |
2 | Ben |
3 | Cathy |
4 | Cathy |
5 | Fakta |
6 | Fakta |
STUDENTID | STUDENTNAME |
---|---|
1 | Faye |
2 | Jet |
3 | Spike |
4 | Ein |
5 | Warren |
6 | Fakta |
Här är ett exempel på hur du använder UNION
operatör för att returnera namnen på alla lärare och elever:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Resultat:
LÄRARNAMN |
---|
Ben |
Bill |
Cathy |
Ein |
Faye |
Jet |
Spike |
Warren |
Som standard är UNION
operatorn tillämpar implicit en DISTINCT
drift. Med andra ord returnerar den endast distinkta värden som standard. Så ovanstående resultat innehåller bara ett vardera av Warren, Cathy och Bill. Detta trots att de kombinerade tabellerna faktiskt innehåller två Warrens, två Cathys och tre Bills (det finns två lärare som heter Cathy, en lärare och en kund som heter Warren, och två som heter Bill, samt en elev som heter Bill).
Inkludera dubbletter
Vi kan använda ALL
sökord för att inkludera dubbletter av värden i resultaten:
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Resultat:
LÄRARNAMN |
---|
Warren |
Ben |
Cathy |
Cathy |
Bill |
Bill |
Faye |
Jet |
Spike |
Ein |
Warren |
Bill |
Den här gången fick vi tolv rader istället för de åtta som vi fick i vårt första exempel.
Vi kan se att båda Cathys returnerades och alla tre räkningarna returnerades.
Några saker att komma ihåg
Observera att uttrycken måste matcha i antal och måste vara i samma datatypgrupp. Därför kan vi inte göra följande:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Resultat:
ORA-01789: query block has incorrect number of result columns
Eller det här:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;
Resultat:
ORA-01790: expression must have same datatype as corresponding expression
Även om vi kan använda funktioner som TO_CHAR()
för att konvertera en kolumn till en lämplig datatypgrupp:
SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;
Resultat:
TEACHERNAME 1 2 3 4 5 6 Ben Bill Cathy Warren