sql >> Database >  >> RDS >> Oracle

Oracle UNION-operator uitgelegd

In Oracle Database, de UNION operator stelt ons in staat om de resultaten van twee zoekopdrachten te combineren in een enkele resultatenset.

Voorbeeld

Stel dat we de volgende tabellen hebben:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultaat:

TEACHERID NAAM LERAAR
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Rekening
6 Rekening
STUDENTID STUDENTNAAM
1 Faye
2 Jet
3 Spike
4 Ein
5 Warren
6 Rekening

Hier is een voorbeeld van het gebruik van de UNION operator om de namen van alle docenten en studenten terug te geven:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultaat:

NAAM LERAAR
Ben
Bill
Cathy
Ein
Faye
Jet
Spike
Warren

Standaard is de UNION operator past impliciet een DISTINCT toe operatie. Met andere woorden, het retourneert standaard alleen afzonderlijke waarden. Dus de bovenstaande resultaten bevatten slechts één van Warren, Cathy en Bill. Dit ondanks het feit dat de gecombineerde tabellen eigenlijk twee Warrens, twee Cathys en drie Bills bevatten (er zijn twee docenten genaamd Cathy, een docent en een klant genaamd Warren, en twee genaamd Bill, evenals een student genaamd Bill).

Duplicaten opnemen

We kunnen de ALL . gebruiken zoekwoord om dubbele waarden in de resultaten op te nemen:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultaat:

NAAM LERAAR
Warren
Ben
Cathy
Cathy
Bill
Bill
Faye
Jet
Spike
Ein
Warren
Bill

Deze keer kregen we twaalf rijen in plaats van de acht die we in ons eerste voorbeeld kregen.

We kunnen zien dat beide Cathy's zijn geretourneerd en alle drie de rekeningen zijn geretourneerd.

Enkele dingen om te onthouden

Houd er rekening mee dat de expressies in aantal moeten overeenkomen en zich in dezelfde gegevenstypegroep moeten bevinden. Daarom kunnen we het volgende niet doen:

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

Resultaat:

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

Of dit:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Resultaat:

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

We kunnen echter functies gebruiken zoals TO_CHAR() om een ​​kolom te converteren naar een geschikte gegevenstypegroep:

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

Resultaat:

TEACHERNAME
1
2
3
4
5
6
Ben
Bill
Cathy
Warren

  1. Een subformulier maken van een tabel in Access 2016

  2. Een inleiding tot zoeken in volledige tekst in MariaDB

  3. SQL Server v.Next:STRING_AGG Prestaties, deel 2

  4. Hoe Substr() werkt in SQLite