Při práci s daty v databázích máme často tendenci používat operátory sady v SQL, abychom získali data podle našich požadavků kombinací dvou nebo více příkazů SELECT. V tomto článku o SQL UNION se budu zabývat operátorem UNION používaným k načítání dat v následujícím pořadí:
- Co je operátor SQL UNION?
- Syntaxe:
- Syntaxe UNION
- Syntaxe UNION ALL
- Rozdíly mezi UNION a UNION ALL
- Příklady SQL UNION:
- Příklad operátora UNION
- Příklad operátoru UNION ALL
- UNION s aliasy SQL
- UNION s klauzulí WHERE
- SPOJETE VŠECHNO s klauzulí WHERE
- UNION s JOINS
- SPOJTE VŠECHNY pomocí JOINS
Začněme!
Co je operátor SQL UNION?
Jak název napovídá, tento operátor/klauzule se používá ke spojení výsledků dvou nebo více příkazů SELECT. Zde musí mít každý příkaz SELECT použitý v příkazu UNION stejný počet sloupců ve stejném pořadí. Také všechny sloupce přítomné v příkazech SELECT musí mít podobné datové typy.
Klauzule UNION poskytuje jako výstup pouze jedinečné hodnoty. Pro případ, že chcete duplicitní hodnoty, musíte použít klauzuli UNION ALL.
V tomto článku o SQL UNION dále porozumíme syntaxi.
Syntaxe SQL UNION
Syntaxe UNION
SELECT Column1, Column2, Column3, ..., ColumnN FROM Table1 UNION SELECT Column1, Column2, Column3, ..., ColumnN FROM Table2;
Syntaxe UNION ALL
SELECT Column1, Column2, Column3, ..., ColumnN FROM Table1 UNION ALL SELECT Column1, Column2, Column3, ..., ColumnN FROM Table2;
Posuneme-li se v tomto článku dále, dovolte nám pochopit rozdíly mezi UNION a UNION ALL.
Rozdíly mezi SQL UNION a UNION ALL
UNION | UNION ALL |
Spojí dvě nebo více sad výsledků a nezachová duplicitní hodnoty. | Spojí dvě nebo více sad výsledků a zachová duplicitní hodnoty. |
Syntax: UNION | Syntax: UNION ALL |
Dále v tomto článku o SQL UNION pochopíme různé způsoby použití tohoto operátoru.
Příklady SQL UNION a UNION ALL
Pro vaše lepší pochopení zvážím následující tabulky, abych vám ukázal různé příklady.
Tabulka zaměstnanců
EmpID | Název | EmpAge | Město | PSČ | Země |
1 | Emma | 23 | Berlín | 12109 | Německo |
2 | Rahul | 26 | Bombaj | 400015 | Indie |
3 | Aayra | 24 | New York | 10014 | USA |
4 | Jan | 32 | Londýn | E1 7AE | Velká Británie |
5 | Derek | 29 | New York | 10012 | USA |
Tabulka projektů
ID projektu | Název | Pracovní dny | Město | PSČ | Země |
1 | Projekt 1 | 10 | Berlín | 12109 | Německo |
2 | Projekt 2 | 7 | Bombaj | 400015 | Indie |
3 | Projekt 3 | 20 | Dillí | 110006 | Indie |
4 | Projekt 4 | 15 | Bombaj | 400015 | Indie |
5 | Projekt 5 | 28 | Berlín | 12109 | Německo |
Začněme příklady.
Příklady SQL UNION
Příklad operátora UNION
Napište dotaz pro načtení různých měst z tabulky Zaměstnanci a projekty.
SELECT City FROM Employees UNION SELECT City FROM Projects ORDER BY City;
Výstup:
Město |
Berlín |
Dillí |
Londýn |
Bombaj |
New York |
Příklad operátora UNION ALL
Napište dotaz a načtěte města z tabulky Zaměstnanci a projekty. Zde musí být zahrnuty duplicitní hodnoty.
SELECT City FROM Employees UNION ALL SELECT City FROM Projects ORDER BY City;
Výstup:
Město |
Berlín |
Berlín |
Berlín |
Dillí |
Londýn |
Bombaj |
Bombaj
|
Bombaj |
New York |
New York |
Dále v tomto článku pochopíme, jak používat klauzuli UNION s aliasy SQL.
UNION s aliasy SQL
Aliasy SQL se používají k přidělení dočasného názvu tabulce nebo sloupci. Pojďme tedy napsat dotaz na seznam všech unikátních zaměstnanců a projektů.
SELECT 'Employee' AS Type, Name, City, Country FROM Employees UNION SELECT 'Project', Name, City, Country FROM Projects;
Výstup:
Typ | Jméno | Město | Země |
Zaměstnanec | Emma | Berlín | Německo |
Zaměstnanec | Rahul | Bombaj | Indie |
Zaměstnanec | Aayra | New York | USA |
Zaměstnanec | Jan | Londýn | Velká Británie |
Zaměstnanec | Derek | New York | USA |
Projekt | Projekt 1 | Berlín | Německo |
Projekt | Projekt 2 | Bombaj | Indie |
Projekt | Projekt 3 | Dillí | Indie |
Projekt | Projekt 4 | Bombaj | Indie |
Projekt | Projekt 5 | Berlín | Německo |
UNION s klauzulí WHERE
Napište dotaz a načtěte jednotlivá indická města a jejich poštovní směrovací čísla z tabulky Zaměstnanci a Projekty.
SELECT City, PostalCode, Country FROM Employees WHERE Country='India' UNION SELECT City, PostalCode, Country FROM Projects WHERE Country='India' ORDER BY City;
Výstup:
Město | PSČ | Země |
Dillí | 110006 | Indie |
Bombaj | 400015 | Indie |
UNION ALL s klauzulí WHERE
Napište dotaz a načtěte indická města a jejich poštovní směrovací čísla z tabulky Zaměstnanci i Projekty, kde jsou povoleny duplicitní hodnoty
SELECT City, PostalCode, Country FROM Employees WHERE Country='India' UNION ALL SELECT City, PostalCode, Country FROM Projects WHERE Country='India' ORDER BY City;
Výstup:
Město | PSČ | Země |
Dillí | 110006 | Indie |
Bombaj | 400015 | Indie |
Bombaj | 400015 | Indie |
Bombaj | 400015 | Indie |
Postupem v tomto článku vpřed pochopíme, jak používat klauzule UNION a UNION ALL s JOINS. JOINS v SQL jsou příkazy, které se používají ke spojení řádků ze dvou nebo více tabulek na základě souvisejícího sloupce mezi těmito tabulkami.
UNION s JOINS
Operátor SQL UNION lze použít s SQL JOINS k načtení dat ze dvou různých tabulek. Vezmu v úvahu následující tabulku spolu s tabulkou Zaměstnanci jako příklad.
Tabulka ProjectDetails
PID | Pracovní dny | EmpID | CostforProject |
11 | 12 | 4 | 20 000 |
22 | 16 | 3 | 35 000 |
33 | 30 | 1 | 60 000 |
44 | 25 | 3 | 45 000 |
55 | 21 | 1 | 50 000 |
SELECT EmpID, Name, CostforProject FROM Employees LEFT JOIN ProjectDetails ON Employees.EmpID = ProjectDetails.EmpID UNION SELECT EmpID, Name, CostforProject FROM Employees RIGHT JOIN ProjectDetails ON Employees.EmpID = ProjectDetails.EmpID;
Výstup:
EmpID | Jméno | CostforProject |
1 | Emma | 60 000 |
1 | Emma | 50 000 |
2 | Rahul | NULL |
3 | Aayra | 35 000 |
3 | Aayra | 45 000 |
4 | Jan | 20 000 |
5 | Derek | NULL |
SPOJETE VŠECHNY s JOINS
Napište dotaz pro získání EmpID, Name a CostforProject z tabulky Employees a ProjectDetails, kde jsou povoleny duplicitní hodnoty.
SELECT EmpID, Name, CostforProject FROM Employees LEFT JOIN ProjectDetails ON Employees.EmpID = ProjectDetails.EmpID UNION ALL SELECT EmpID, Name, CostforProject FROM Employees RIGHT JOIN ProjectDetails ON Employees.EmpID = ProjectDetails.EmpID;
Výstup:
EmpID | Jméno | CostforProject |
1 | Emma | 60 000 |
1 | Emma | 50 000 |
2 | Rahul | NULL |
3 | Aayra | 35 000 |
3 | Aayra | 45 000 |
4 | Jan | 20 000 |
5 | Derek | NULL |
4 | Jan | 20 000 |
3 | Aayra | 35 000 |
1 | Emma | 60 000 |
3 | Aayra | 35 000 |
1 | Emma | 50 000 |
Tím se dostávám na konec tohoto článku o SQL UNION. Doufám, že se vám tento článek o SQL UNION líbil. Viděli jsme různé způsoby použití příkazů UNION a UNION ALL, které vám pomohou psát dotazy. Pokud se chcete dozvědět více o MySQL a poznat tuto open source relační databázi, podívejte se na naši MySQL DBA Certifikační školení který přichází s instruktorem vedeným živým školením a reálnými zkušenostmi z projektů. Toto školení vám pomůže porozumět MySQL do hloubky a pomůže vám dosáhnout zvládnutí tohoto předmětu.
Máte na nás otázku? Uveďte to prosím v sekci komentářů „SQL UNION“ a já se vám ozvu.