V PostgreSQL, UNION
operátor kombinuje výsledky z více dotazů do jediné sady výsledků.
Syntaxe
Oficiální syntaxe vypadá takto:
query1 UNION [ALL] query2
UNION
operátor připojí výsledek query2
na výsledek query1
(ačkoli neexistuje žádná záruka, že toto je pořadí, ve kterém jsou řádky skutečně vráceny).
Duplicitní řádky jsou odstraněny, pokud není UNION ALL
se používá.
Příklad
Předpokládejme, že máme následující tabulky:
SELECT * FROM Teachers;
SELECT * FROM Students;
Výsledek:
teacherid | 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
Můžeme použít UNION
operátor vrátit všechny učitele a studenty:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Výsledek:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
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).
Zde je příklad, který explicitně používá DISTINCT
operátor:
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Výsledek:
teachername ------------- Spike Ben Ein Cathy Jet Faye Bill Warren (8 rows)
Stejný výsledek.
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 (12 rows)
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.