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.