MySQL UNION – Kompletní návod

⚡ Chytré shrnutí

MySQL Funkce UNION kombinuje výsledky dvou nebo více dotazů SELECT do jedné konsolidované sady výsledků. Toto vysvětlení zahrnuje pravidla pro sloupce, která zajišťují platnost sjednocení, rozdíl mezi UNION DISTINCT a UNION ALL a příklady spuštěné v databázi myflixdb.

  • 🔗 Hlavní účel: Příkaz UNION seskupuje řádky vrácené několika dotazy SELECT do jedné sady výsledků, jeden dotaz pod druhým.
  • 📐 Pravidlo sloupce: Každý příkaz SELECT musí vrátit stejný počet sloupců, ve stejném pořadí, s kompatibilními datovými typy.
  • 🧹 ROZLIŠOVACÍ PRŮKAZ UNIE: Duplicitní řádky jsou odstraněny a vráceny jsou pouze jedinečné řádky, a to je chování. MySQL platí ve výchozím nastavení.
  • ???? VŠECHNY UNIE: Vrátí se každý řádek včetně duplikátů, což je rychlejší, protože není vyžadován žádný deduplikační průchod.
  • ???? ️ Názvy sloupců: Výsledná sada přebírá názvy sloupců z prvního příkazu SELECT, takže aliasy do tohoto dotazu patří.
  • 🛠️ Typické použití: Sloučení dvou tabulek, které obsahují stejný typ záznamu, bez povolení duplicitních řádků ve sloučeném výstupu.

MySQL UNION OperaTor

V čem je UNIE MySQL?

UNION je MySQL Operátor, který kombinuje výsledky z více dotazů SELECT do konsolidované sady výsledků. Řádky vrácené druhým dotazem jsou umístěny pod řádky vrácené prvním dotazem, čímž vznikne jeden vertikální seznam místo dvou samostatných.

Jediným požadavkem, aby to fungovalo, je, aby počet sloupců ve všech dotazech SELECT, které je třeba zkombinovat, byl stejný.

Předpokládejme, že máme dvě tabulky, jak je uvedeno níže.

MySQL UNIONMySQL UNION

Obě tabulky obsahují dva sloupce stejného typu, takže je lze sjednotit. Následující příklady kombinují přesně tyto dvě tabulky.

Proč používat UNION?

Předpokládejme, že v návrhu vaší databáze je chyba a používáte dvě různé tabulky určené pro stejný účel. Chcete tyto dvě tabulky sloučit do jedné a zároveň vynechat všechny duplicitní záznamy z cree...ping do nové tabulky. V takových případech můžete použít UNION.

Operátor je také užitečný při každodenní práci s reporty:

  • Archidatová a živá data: Aktuální tabulku a archivní tabulku, které sdílejí stejné sloupce, lze vytvářet společně, aniž by bylo nutné je fyzicky sloučit.
  • Několik zdrojů, jedna zpráva: Členové a filmy nebo prodeje ze dvou regionů lze pro rychlý přehled uvést v jednom výstupu.
  • Kontroly migrace: Řádky ze staré a nové tabulky lze před odstraněním staré tabulky stohovat a porovnávat.

Sjednocení nenahrazuje operátor JOIN. UNION přidává řádky pod řádky, zatímco JOIN přidává sloupce vedle sloupců a toto rozlišení určuje, který operátor úloha volá.

MySQL Syntaxe a pravidla UNION

Nyní, když je účel jasný, podívejme se na tvar příkazu a pravidla, která databáze vynucuje.

SELECT column1, column2 FROM `table1`
UNION [DISTINCT | ALL]
SELECT column1, column2 FROM `table2`;

Každou odborovou organizaci řídí tři pravidla:

  1. Stejný počet sloupců. Každý příkaz SELECT musí vrátit stejný počet sloupců, jinak MySQL vyvolá chybu 1222.
  2. Kompatibilní datové typy ve stejném pořadí. První sloupec prvního dotazu se porovnává se sloupcem jedním druhého, takže číslo by mělo odpovídat číslu a text by měl odpovídat textu.
  3. Jména pocházejí z prvního dotazu. Záhlaví výsledné sady se přebírá z prvního SELECTu, a proto tam patří jakýkoli alias.

An ORDER BY nebo LIMIT Klauzule umístěná na konci se vztahuje na kombinovaný výsledek, nikoli na jednu jeho větev, a musí odkazovat na názvy sloupců vygenerované prvním příkazem SELECT.

UNION DISTINCT vs. UNION ALL

Po zavedení pravidel zbývá rozhodnout, zda by duplicitní řádky měly přežít.

Kombinování tabulek pomocí funkce DISTINCT

Nyní vytvořme sjednocovací dotaz (UNION), který obě tabulky sloučí pomocí funkce DISTINCT.

SELECT column1, column2 FROM `table1`
UNION DISTINCT
SELECT column1, column2 FROM `table2`;

Zde se odstraní duplicitní řádky a vrátí se pouze jedinečné řádky.

Union-Distinct

Poznámka: MySQL používá klauzuli DISTINCT jako výchozí při provádění dotazů UNION, pokud není nic zadáno.

Kombinování tabulek pomocí funkce ALL

Nyní vytvořme sjednocovací dotaz (UNION), který obě tabulky sloučí pomocí funkce ALL.

SELECT `column1`, `column2` FROM `table1`
UNION ALL
SELECT `column1`, `column2` FROM `table2`;

Zde jsou zahrnuty duplicitní řádky, protože používáme ALL.

Union-All

Dva obrázky rozdíl snadno ukazují a tabulka níže ho shrnuje.

Bod srovnání UNION VÝZNAM UNION ALL
Duplicitní řádky Odebráno z výsledku Zachováno ve výsledku
Výchozí chování Ano, použije se, pokud není nic specifikováno Ne, klíčové slovo ALL musí být napsáno
Rychlost Pomalejší, je vyžadován deduplikační průchod Rychlejší, řádky se vracejí hned po načtení
Nejlépe se používá, když Sloučený seznam musí obsahovat jedinečné řádky. Každý řádek je důležitý, jinak se nemohou vyskytovat duplikáty

💡 Tip: Pokud obě větve nemohou vytvořit duplicitní řádky, zvolte UNION ALL. Databáze pak přeskočí třídění a porovnávání, které vyžaduje DISTINCT, což představuje znatelnou úsporu u velkých tabulek.

Praktický příklad použití MySQL Workbench

Dosavadní příklady používaly vzorové tabulky. Stejný dotaz nyní běží na skutečné databázi myflixdb, kde obě tabulky obsahují zcela odlišné záznamy.

V naší databázi myFlixDB zkombinujme membership_number a full_names sloupce z tabulky členů s movie_id a title sloupce z tabulky filmů. Oba dotazy vracejí dva sloupce, takže sjednocení je platné.

Můžeme použít následující dotaz.

SELECT `membership_number`, `full_names` FROM `members`
UNION
SELECT `movie_id`, `title` FROM `movies`;

Spuštění výše uvedeného skriptu v MySQL ponk Prostřednictvím databáze myflixdb získáme následující výsledky. Všimněte si, že nadpisy pocházejí z prvního SELECTU, i když spodní řádky obsahují záznamy o filmech.

membership_number full_names
1 Janet Jones
2 Janet Smith Jones
3 Robert Phil
4 Gloria Williams
5 Leonard Hofstadter
6 Sheldon Cooper
7 Rajesh Koothrappali
8 Leslie Winkle
9 Howard Wolowitz
16 67% Guilty
6 Angels and Demons
4 Code Name Black
5 Daddy's Little Girls
7 Davinci Code
2 Forgetting Sarah Marshal
9 Honey mooners
19 movie 3
1 Pirates of the Caribean 4
18 sample movie
17 The Great Dictator
3 X-Men

Nejčastější dotazy

Funkce UNION vrství řádky jednoho dotazu pod druhý, takže výsledek je vyšší. REGISTRACE Porovnává související řádky a umisťuje jejich sloupce vedle sebe, takže výsledek se rozšíří. Pro podobné řádky použijte UNION a pro související tabulky JOIN.

Umístěte jeden SEŘADIT PODLE Klauzule za posledním příkazem SELECT. Seřadí kombinovaný výsledek a musí použít názvy sloupců vytvořené prvním příkazem SELECT. Klauzule LIMIT umístěná tam se chová stejně.

Chyba 1222 se zobrazí, když větve SELECT vrátí nestejný počet sloupců. Spočítejte sloupce v každé větvi a přidejte literál nebo zástupný symbol NULL do kratší větve tak, aby se obě strany zarovnaly ve stejném pořadí.

Ano. Asistenti pro odesílání textu do SQL, včetně těch, které jsou vestavěny do MySQL Workbench, generujte příkazy UNION z prostého požadavku. Pořadí sloupců si zkontrolujte sami, protože model dokáže zarovnat i sloupce, které si jen podobně podobají.

Asistent může navrhnout UNION ALL, pokud duplikáty nejsou možné, což je běžná výhoda v rychlosti. Rozhodnutí stále závisí na datech, proto před odstraněním kroku deduplikace ověřte, zda se větve skutečně nemohou překrývat.

Shrňte tento příspěvek takto: