sql >> Databáze >  >> RDS >> Database

Jak zkombinovat výsledky dvou dotazů v SQL

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.


  1. Škálovatelné procesory Intel Xeon a SQL Server 2017

  2. Datatyp Oracle:Mám použít VARCHAR2 nebo CHAR

  3. Skriptujte celou databázi SQL-Server

  4. Volání uložené procedury s parametrem Out pomocí PDO