Problém:
Chcete zobrazit data z daných sloupců (podobného datového typu) ze dvou tabulek v SQL.
Příklad:
V naší databázi jsou dvě tabulky:employee
a customer
.
employee
tabulka obsahuje data v následujících sloupcích:id , křestní_jméno , last_name a věk .
id | first_name | last_name | věk |
---|---|---|---|
1 | Tome | Miller | 22 |
2 | Jan | Smith | 26 |
3 | Lisa | Williams | 30 |
4 | Karel | Davis | 21 |
5 | James | Moore | 22 |
customer
tabulka obsahuje data v následujících sloupcích:id , křestní_jméno , last_name a věk .
id | first_name | last_name | věk |
---|---|---|---|
1 | Milán | Smith | 45 |
2 | Karel | Davis | 21 |
3 | Označit | Backer | 19 |
V jedné sadě výsledků zobrazíme křestní jméno, příjmení a věk všech lidí v databázi, zaměstnanců i zákazníků.
Řešení 1:
Použijeme UNION ALL
pro spojení dat ze sloupců ve dvou tabulkách.
Zde je dotaz, který byste napsali:
SELECT first_name, last_name, age FROM employee UNION ALL SELECT first_name, last_name, age FROM customer;
Zde je výsledek:
first_name | last_name | věk |
---|---|---|
Tome | Miller | 22 |
Jan | Smith | 26 |
Lisa | Williams | 30 |
Karel | Davis | 21 |
James | Moore | 28 |
Milán | Smith | 45 |
Karel | Davis | 21 |
Označit | Backer | 19 |
Diskuse:
Klauzuli UNION ALL použijte ke spojení dat ze sloupců ve dvou nebo více tabulkách. V našem příkladu spojujeme data od employee
a customer
tabulky. Nalevo od klíčového slova UNION ALL vložte první příkaz SELECT, abyste získali data z první tabulky (v našem příkladu tabulka employee
). Vpravo použijte další příkaz SELECT k získání dat z druhé tabulky (v našem příkladu customer
).
Nezapomeňte, že vybraná data v obou tabulkách musí mít v každém sloupci stejný datový typ. Pokud je například první sloupec v prvním SELECT datový typ řetězce, první sloupec v druhém SELECT musí být také datový typ řetězce. Pokud je druhý sloupec v prvním příkazu SELECT celé číslo, druhý sloupec ve druhé tabulce musí být také typu celé číslo.
V prvním dotazu jsme do třetího sloupce vybrali věk (věk zaměstnance, což je celočíselný datový typ). Třetí sloupec ve druhém SELECT je tedy také celočíselná hodnota; je to věk zákazníka.
Druhé sloupce v obou příkazech SELECT jsou stejného datového typu. Pokud jsou však hodnoty v obou tabulkách stejné, zobrazí se vícekrát; například „Charles Davis 21“ se v sadě výsledků zobrazí dvakrát.
Co když nechcete ve výsledkové tabulce více stejných záznamů? V tomto případě použijte UNION
. Je podobný UNION ALL
, ale odstraní duplicitní záznamy. Podívejte se na následující příklad.
Řešení 2:
Zde je dotaz, který zabrání duplicitním záznamům:
SELECT first_name, last_name FROM employee UNION SELECT first_name, last_name FROM customer;
Zde je výsledek výše uvedeného dotazu:
first_name | last_name |
---|---|
Označit | Backer |
James | Moore |
Jan | Smith |
Karel | Davis |
Milán | Smith |
Tome | Miller |
Lisa | Williams |
Poznámka:
UNION ALL
je rychlejší než UNION
, ale UNION
odstraní duplicitní řádky. Volba závisí na výsledných datech, která potřebujeme.