sql >> Databasteknik >  >> RDS >> Oracle

Oracle UNION Operatör förklaras

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

  1. DUBBEL vs DECIMAL i MySQL

  2. Hur man använder analytiska funktioner i oracle (överpartition efter nyckelord)

  3. Postgres:konvertera en rad till flera rader (unpivot)

  4. Hur man infogar flera rader i MySQL