sql >> Databáze >  >> RDS >> Oracle

Vysvětlení operátora Oracle UNION

V databázi Oracle, UNION operátor nám umožňuje spojit výsledky ze dvou dotazů do jediné sady výsledků.

Příklad

Předpokládejme, že máme následující tabulky:

SELECT * FROM Teachers;
SELECT * FROM Students;

Výsledek:

ID UČITELE 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

Zde je příklad použití UNION operátor vrátit jména všech učitelů a studentů:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Výsledek:

TEACHERNAME
Ben
Bill
Cathy
Ein
Faye
Jet
Spike
Warren

Ve výchozím nastavení UNION operátor implicitně aplikuje DISTINCT úkon. Jinými slovy, ve výchozím nastavení vrací pouze odlišné hodnoty. Výše uvedené výsledky tedy obsahují pouze jeden Warren, Cathy a Bill. A to i přesto, že kombinované stoly ve skutečnosti obsahují dva Warreny, dvě Cathy a tři Billy (jsou tam dva učitelé Cathy, učitel a zákazník jménem Warren a dva Bill a jeden student Bill).

Zahrnout duplikáty

Můžeme použít ALL klíčové slovo pro zahrnutí duplicitních hodnot do výsledků:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Výsledek:

TEACHERNAME
Warren
Ben
Cathy
Cathy
Bill
Bill
Faye
Jet
Spike
Ein
Warren
Bill

Tentokrát jsme dostali dvanáct řádků místo osmi, které jsme dostali v našem prvním příkladu.

Vidíme, že obě Cathy byly vráceny a všechny tři účty byly vráceny.

Něco k zapamatování

Všimněte si, že výrazy se musí shodovat v počtu a musí být ve stejné skupině datových typů. Proto nemůžeme udělat následující:

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

Výsledek:

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

Nebo toto:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

Výsledek:

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

Můžeme však použít funkce jako TO_CHAR() převést sloupec na vhodnou skupinu datových typů:

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

Výsledek:

TEACHERNAME
1
2
3
4
5
6
Ben
Bill
Cathy
Warren

  1. Příkaz Oracle CREATE TABLE v PL/SQL s 10 příklady

  2. Je možné definovat globální proměnné v postgresql

  3. SQL Server SHOWPLAN_TEXT

  4. SQL select where not in subdotaz nevrací žádné výsledky