mysql union comprehensive tutorial with union examples
Tento výukový program vysvetľuje príkaz MySQL UNION, jeho typy, Union vs Union All a príklady kombinácie údajov z 2 alebo viacerých dotazov:
MySQL UNION sa používa na kombináciu výsledkov z viacerých dotazov SELECT do jednej výsledkovej sady. Je tiež možné mať všetky zložité dotazy / operácie v dotazoch SELECT a vykonávať UNION s ďalšími príkazmi SELECT, aby ste dosiahli kombinovaný výsledok.
otázky a odpovede na pohovor s webovými službami
Predvolenou charakteristikou príkazu UNION by bolo odstránenie duplicitných záznamov alebo riadkov z výslednej sady riadkov, poskytuje však spôsoby, ako načítať aj duplicitné záznamy pomocou klauzuly UNION ALL.
Čo sa dozviete:
- Pochopenie ÚNIE prostredníctvom teórie množín
- Aký problém rieši MySQL UNION
- MySQL UNION Vs UNION ALL
- Záver
Pochopenie ÚNIE prostredníctvom teórie množín
Fungovanie Únie bolo možné veľmi dobre pochopiť z princípov teórie SET.
Predpokladajme, že máme tabuľky A a B znázornené nižšie uvedenými množinami a obsahujú nejaké prekrývajúce sa údaje (alebo môžu tiež úplne nesúvisieť) - program UNION bude obsahovať kombináciu údajov z oboch tabuliek.
Pozrime sa na príklad, kde množiny A a B majú niektoré spoločné prvky. UNION bude obsahovať všetky hodnoty z množiny A & B s vynechaním duplicitných hodnôt.
Čo teraz, keď sú množiny A a B disjunktné a neobsahujú spoločné prvky? Aj tu vráti ÚNIA rovnaký výsledok.
Poďme diskutovať o scenári, keď sa medzi množinami nachádzajú prekrývajúce sa prvky a chceme, aby sa vo výsledkovej sade zobrazili aj duplicitné hodnoty.
MySQL poskytuje spôsob, ako to dosiahnuť, pomocou možnosti UNION ALL, ako je znázornené na nasledujúcom obrázku.
Aký problém rieši MySQL UNION
MySQL UNION sa používa, ak máte podobné údaje vo 2 alebo viacerých tabuľkách a chcete zobraziť kombinované zobrazenie údajov obsiahnutých v oboch tabuľkách, a nie spustiť príkazy SELECT pre jednotlivé tabuľky.
Napríklad - Predpokladajme, že existujú 2 tabuľky - Zamestnanec a Študent. A pracujete na databáze osôb, ktorá chce mať iba meno, vek a dátum narodenia pre všetkých zamestnancov a študentov.
Bez systému UNION budete musieť vykonať samostatné dotazy SELECT pre obe tabuľky a potom vykonať požadovaný výpočet so získanou sadou výsledkov.
Syntax MySQL UNION
Nasledujúce dotazy vrátia ÚNII s 2 alebo viac ako 2 príkazmi SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Skúsme si pozrieť rôzne komponenty syntaxe
- Vidíme, že je možné kombinovať viac príkazov SELECT s programom UNION, aby sme získali výslednú množinu riadkov.
- Názov stĺpca a typy údajov: Je dôležité si uvedomiť, že stĺpce, ktoré chceme kombinovať, by mali mať rovnaký alebo kompatibilný typ údajov. Napríklad: ak máte stĺpec1 ako STRING, potom by mal byť stĺpec3 tiež STRING (alebo kompatibilný s STRING).
- Názvy a polohy stĺpcov sú určené z prvého príkazu SELECT v dotaze UNION. Napríklad vo vyššie uvedenej syntaxi: stĺpce1 a 2 sú pomenované ako stĺpce hlavičiek v množine výsledkov a hodnoty stĺpcov 3 a 4 sú mapované na stĺpce 1 a 2.
- Výsledky dotazu UNION štandardne odstránia duplicitné položky. Napríklad, v tomto prípade, ak existuje duplicitný záznam, ktorý má presnú zhodu a má rovnaké hodnoty pre stĺpec1 a stĺpec2, potom budú tieto riadky z množiny výsledkov vynechané.
Ak sú potrebné duplikáty, môžeme spolu s ÚNIOU použiť možnosť „VŠETKY“.
Využitie ODLIŠNÝ je implicitne implicitné. Upozorňujeme, že kvôli lepšej čitateľnosti je možné ich explicitne špecifikovať.
Pozrime sa na ukážkový príklad dotazu UNION.
Predpokladajme, že existujú 2 tabuľky - zamestnanec a študent - každá s osobnými údajmi.
CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100)); CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Teraz zadajte fiktívne údaje do obidvoch týchto tabuliek, ako je uvedené nižšie:
INSERT INTO employee values (1,'Darren', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 20, '2000-05-12', 'TRAINEE'); ---------------------------------------------- INSERT INTO student values (1,'Akash', 22, '1998-05-17', 'COMPUTER'), (2,'Ian', 26, '1994-06-18', 'COMPUTER'), (3,'Shirley', 19, '2001-11-20', 'MECHANICAL'), (4,'Joana', 21, '1999-05-21', 'ELECTRONICS'), (5,'Kartik', 20, '2000-05-12', 'COMPUTER');
Ako vidíte vyššie, zámerne sme pridali riadok, ktorý má rovnaké atribúty pre meno, vek a dátum narodenia.
Pozrime sa teraz, ako môžeme kombinovať údaje v týchto 2 tabuľkách pomocou príkazov UNION. Z oboch tabuliek budeme zisťovať meno používateľa a vek.
Jednoduchá ÚNIA
Dopyt:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Vo výsledku uvidíte 9 záznamov (čo znamená, že vyššie uvedený dotaz vynechal duplicitný záznam).
Výkon:
názov | Vek |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | dvadsať |
Akash | 22 |
Shirley | 19 |
Joana | dvadsaťjeden |
ÚNIA S ÚNIOU VŠETKY
Použitie klauzuly UNION s ALL zabezpečí, že sa zobrazia aj duplicitné záznamy.
Dopyt:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Výkon:
názov | Vek |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | dvadsať |
Akash | 22 |
Shirley | 19 |
Joana | dvadsaťjeden |
Kartik | dvadsať |
ÚNIA S podmienkou
Pridajme podmienky k vyhláseniam SELECT, kde chceme mať údaje o zamestnancoch vo veku do 30 rokov a študentov vo veku do 25 rokov.
Dopyt:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Výkon:
názov | Vek |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | dvadsať |
Akash | 22 |
Shirley | 19 |
Joana | dvadsaťjeden |
Ako vidíte vyššie, sada výsledkov obsahuje kombinovaný výsledok s overenými jednotlivými podmienkami SELECT.
Objednávanie výsledkov UNION
Výsledky dotazu UNION sú predvolene usporiadané.
Aby bolo možné nariadiť zoradenie podľa stĺpca, ktorý existuje vo výslednej množine, je možné na konci príkazu UNION zadať klauzulu ORDER BY.
Použime rovnaké údaje o zamestnancovi a študentovi a usporiadajme výsledky UNION vzostupne podľa veku.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Výkon:
názov | Vek |
---|---|
Shirley | 19 |
Kartik | dvadsať |
Joana | dvadsaťjeden |
Akash | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
Vyššie uvedená sada výsledkov je zoradená podľa vekových hodnôt v rastúcom poradí. Môžeme tiež použiť aliasy stĺpcov na označenie stĺpcov v klauzule ORDER BY.
Napríklad: - Rovnaký výsledok prinesie aj dotaz uvedený nižšie.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Existuje ďalší spôsob, ako použiť klauzulu ORDER BY, a to iba uvedením polohy stĺpca namiesto názvu stĺpca.
Napríklad: Vo vyššie uvedenom dotaze UNION vyberáme meno a vek, čo znamená, že tieto stĺpce sú na pozíciách 1, respektíve 2.
Takže pre OBJEDNÁVANIE PODĽA veku môžeme namiesto skutočného názvu stĺpca jednoducho určiť pozíciu.
Preto nižšie uvedený dotaz prinesie rovnaký výsledok.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION Vs UNION ALL
MySQL poskytuje 2 varianty UNION t.j. VÝZNAM ÚNIE a VŠETKO ÚNIA
Upozorňujeme, že DISTINCT je implicitne implikovaná, aj keď nie je uvedená.
Hlavný rozdiel medzi oboma z nich je, že program UNION ALL umožňuje kombinovať a vracať aj duplicitné riadky, zatiaľ čo program UNION iba vracia kombinované riadky a odstraňuje duplikáty.
V nasledujúcej tabuľke sú vysvetlené podrobnosti:
Parameter | ÚNIA | VŠETKO ÚNIA |
---|---|---|
Definícia | Je ekvivalentné UNION DISTINCT - pri vrátení výsledku ignoruje duplicitné riadky údajov | Vráti všetky riadky vrátane duplikátov |
Syntax | VYBERTE {columnList} Z {tabuľky1} ÚNIA SELECT {columnList} FROM {table2} | VYBERTE {columnList} Z {tabuľky1} VŠETKO ÚNIA SELECT {columnList} FROM {table2} |
Požiadavky na údaje | Kombinované údaje by mali mať podobné typy údajov a pri načítaní z viacerých tabuliek by sa mali načítať v rovnakom poradí | Rovnaké ako ÚNIA |
často kladené otázky
Otázka 1) Je Union rýchlejšia ako JOIN?
Odpoveď: Jednotky UNION a JOIN sa používajú prakticky na 2 rôzne účely.
Technicky vzaté, UNION je oveľa rýchlejší ako JOIN (najmä pre veľké dátové súbory), pretože UNION iba zreťazuje riadky údajov z jednotlivých príkazov SELECT.
Otázka 2) Čo je operátor UNION ALL?
Odpoveď: Podobne ako v prípade UNION, aj operátor UNION ALL vráti UNION medzi 2 dotazmi SELECT, rozdiel je však v tom, že obsahuje aj duplicitné riadky / položky.
Otázka č. 3) Aký je rozdiel medzi programami UNION a JOIN?
Odpoveď: Programy UNION aj JOIN sa používajú na kombinovanie údajov z 2 alebo viacerých tabuliek. Existuje však obrovský rozdiel, pokiaľ ide o získanú množinu výsledkov a spôsob načítania údajov.
Podobnosti a rozdiely medzi JOIN a UNION sú uvedené v nasledujúcej tabuľke:
ÚNIA | PRIPOJTE SA |
---|---|
Kombinuje údaje z viacerých tabuliek | Kombinuje údaje z viacerých tabuliek |
Na zhromažďovanie alebo kombinovanie údajov nie sú potrebné žiadne konkrétne podmienky | JOIN funguje na podmienke JOIN, ktorá sa vyžaduje na overenie údajov prichádzajúcich do množiny výsledkov |
Údaje z rôznych tabuliek sa považujú za rôzne riadky výsledkovej sady | Údaje z rôznych tabuliek sa kombinujú do jedného riadku - napríklad riadok vo výsledkovej sade môže obsahovať 2 stĺpce z tabuľky 1, 3 stĺpce z tabuľky 2 atď. V závislosti od podmienky JOIN a dotazu SELECT. |
ÚNIE sú jednoduché a priame | JOINS vyžadujú zložité podmienky a v závislosti od potrieb je možné použiť viac typov spojení ako INNER / OUTER atď. |
Záver
V tomto tutoriáli sme sa naučili používať MySQL UNION na kombinovanie údajov z 2 alebo viacerých príkazov SELECT.
Príkaz UNION je skutočne užitočný pri zhromažďovaní podobných údajov z veľkých množín rôznych tabuliek a následnom spustení analýzy kombinovaných údajov.
Príkaz UNION taktiež podporuje klauzulu ALL, ktorá umožňuje aj načítanie duplicitných záznamov.
Odporúčané čítanie
- Čo je MySQL a prečo sa používa?
- Rozdiel medzi serverom SQL Vs MySQL Vs SQL Server (s príkladmi)
- Vnútorný spoj vs Vonkajší spoj: Presný rozdiel s príkladmi
- Výukový program MySQL JOIN: Vnútorný, Vonkajší, Krížový, Ľavý, Pravý a Ja
- Výukový program na vytváranie zobrazení MySQL s príkladmi kódu
- MySQL Vytvorenie výučby tabuľky s príkladmi
- Výukový program pre vyhlásenie o aktualizácii MySQL - aktualizácia syntaxe dotazov a príklady
- Top 40 najlepších otázok a odpovedí na rozhovor s MySQL (2021 otázok)