13.12.2012, Vladimír Klaus, navštíveno 20333x

MS Access
SQL

Aby to nebylo tak jednoduché, tak JOIN spojuje tabulky a UNION také. V čem tkví rozdíl? JOIN spojuje tabulky horizontálně (tedy výsledek má více sloupců), kdežto UNION spojuje tabulky vertikálně (výsledek má více řádek) – tedy jinak řečeno – spojuje výsledek dvou SQL dotazů.

Naše ukázkové tabulky nejsou zrovna vhodné pro dobrý příklad použití příkazu UNION, ale můžeme si to demonstrovat alespoň takto. Budeme mít dva dotazy – jeden bude vybírat zákazníky z Prahy 1 a druhý z Prahy 8. A nás bude zajímat přehled všech těchto zákazníků.

SELECT * FROM Zakaznici WHERE Mesto = "Praha 8"
UNION
SELECT * FROM Zakaznici WHERE Mesto = "Praha 1"

SQL obrázek

Asi je všem jasné, že stejného výsledku dosáhneme tímto dotazem.

SELECT * FROM Zakaznici
WHERE Mesto = "Praha 8" OR Mesto = "Praha 1"

V dalším příkladu si ukážeme, že také existuje příkaz UNION ALL. UNION totiž zároveň umí vyřazovat duplicitní řádky, které mohou vzniknout spojením dotazů. UNION ALL spojí oba dotazy, aniž by duplicity vyřadil.

Mějme tedy tento dotaz, který spojí zákazníky z jakékoli Prahy se zákazníky z Prahy 1.

SELECT * FROM Zakaznici WHERE Mesto LIKE "Praha*"
UNION ALL
SELECT * FROM Zakaznici WHERE Mesto = "Praha 1"

Protože použijeme UNION ALL, budou tam zákazníci z Prahy 1 přítomni 2x.

SQL obrázek

Při použití je třeba pamatovat také na to, že spojované dotazy musí mít stejné sloupce (stejný počet, pojmenování i typy). Tento dotaz proto skončí chybou.

SELECT Jmeno, Mesto FROM Zakaznici WHERE Mesto = "Praha 8"
UNION
SELECT * FROM Zakaznici WHERE Mesto = "Praha 1"

SQL obrázek

Upozornění: Výsledek funkce UNION/UNION ALL není editovatelný!

Viz též použití UNION ALL při realizaci příkazu OUTER JOIN. V tomto případě je použití UNION ALL trochu zbytečné, protože i samotné UNION z principu věci zajistí správný výsledek.