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