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

Oracle UNION-operatør forklaret

I Oracle Database er UNION operator giver os mulighed for at kombinere resultaterne fra to forespørgsler til et enkelt resultatsæt.

Eksempel

Antag, at vi har følgende tabeller:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultat:

LÆRERID TEACHERNAME
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Bill
6 Bill
STUDENTID STUDENTNAME
1 Faye
2 Jet
3 Spike
4 Ein
5 Warren
6 Bill

Her er et eksempel på brug af UNION operatør for at returnere navnene på alle lærere og elever:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultat:

LÆRERNAVN
Ben
Bill
Cathy
Ein
Faye
Jet
Spike
Warren

Som standard er UNION operatør anvender implicit en DISTINCT operation. Med andre ord returnerer det kun distinkte værdier som standard. Så ovenstående resultater indeholder kun én af hver af Warren, Cathy og Bill. Dette er på trods af, at de kombinerede tabeller faktisk indeholder to Warrens, to Cathys og tre Bills (der er to lærere, der hedder Cathy, en lærer og en kunde, der hedder Warren, og to, der hedder Bill, samt en elev, der hedder Bill).

Medtag dubletter

Vi kan bruge ALL søgeord for at inkludere duplikerede værdier i resultaterne:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultat:

LÆRERNAVN
Warren
Ben
Cathy
Cathy
Bill
Bill
Faye
Jet
Spike
Ein
Warren
Bill

Denne gang fik vi tolv rækker i stedet for de otte, som vi fik i vores første eksempel.

Vi kan se, at begge Cathys blev returneret, og alle tre regninger blev returneret.

Nogle ting at huske

Bemærk, at udtrykkene skal matche i antal og skal være i samme datatypegruppe. Derfor kan vi ikke gøre følgende:

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

Resultat:

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

Eller denne:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Resultat:

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

Selvom vi kan bruge funktioner som TO_CHAR() for at konvertere en kolonne til en passende datatypegruppe:

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

Resultat:

TEACHERNAME
1
2
3
4
5
6
Ben
Bill
Cathy
Warren

  1. Flere INSERT-sætninger vs. enkelt INSERT med flere VALUES

  2. Sådan skriver du udvalgte erklæringer

  3. Fejl ORA-65048 ved ændring af brugeradgangskode i containerdatabase (CDB)

  4. Hvordan kan jeg liste ALLE tilskud en bruger har modtaget?