MySQL UNION – Teljes oktatóanyag

⚡ Okos összefoglaló

MySQL Az UNION két vagy több SELECT lekérdezés eredményeit egyetlen konszolidált eredményhalmazba egyesíti. Ez a magyarázat ismerteti az uniót érvényessé tevő oszlopszabályokat, a UNION DISTINCT és az UNION ALL közötti különbséget, valamint a myflixdb adatbázison futtatott működő példákat.

  • 🔗 Fő cél: Az UNION több SELECT lekérdezés által visszaadott sorokat egyetlen eredményhalmazba rendezi, az egyik lekérdezés a másik alá kerül.
  • 📐 Oszlopszabály: Minden SELECT függvénynek ugyanannyi oszlopot kell visszaadnia, ugyanabban a sorrendben, kompatibilis adattípusokkal.
  • 🧹 UNIÓS KÜLÖNBÖZŐ: A duplikált sorok eltávolításra kerülnek, és csak az egyedi sorok kerülnek visszaadásra, és ez a viselkedés MySQL alapértelmezés szerint érvényes.
  • ???? UNIÓ MINDEN: Minden sor visszaadásra kerül, beleértve a duplikátumokat is, ami gyorsabb, mivel nincs szükség deduplikációs lépésre.
  • 🏷️ Oszlopnevek: Az eredményhalmaz az oszlopneveket az első SELECT utasításból veszi, így az aliasok ebbe a lekérdezésbe tartoznak.
  • 🇧🇷 Tipikus felhasználás: Két, azonos típusú rekordot tartalmazó tábla egyesítése anélkül, hogy ismétlődő sorok kerülnének az egyesített kimenetbe.

MySQL UNION Operator

Mi az a UNION? MySQL?

UNION egy olyan MySQL operátor, amely több SELECT lekérdezés eredményeit egyetlen konszolidált eredményhalmazba egyesíti. A második lekérdezés által visszaadott sorok az első által visszaadott sorok alá kerülnek, ami egy függőleges listát hoz létre két különálló lista helyett.

Az egyetlen feltétel, hogy az összes egyesítendő SELECT lekérdezésben azonos számú oszlop szerepeljen.

Tegyük fel, hogy két táblázatunk van, az alábbiak szerint.

MySQL UNIONMySQL UNION

Mindkét tábla két azonos típusú oszlopot tartalmaz, így alkalmasak az unióra. A következő példák pontosan ezt a két táblát egyesítik.

Miért érdemes UNION-t használni?

Tegyük fel, hogy hiba van az adatbázis-tervezésben, és két különböző, ugyanarra a célra szánt táblát használ. Ezt a két táblát egybe szeretné vonni, miközben elhagyja a cree-ből az ismétlődő rekordokat.ping az új táblába. Ilyen esetekben használhatod az UNION függvényt.

Az operátor a mindennapi jelentéskészítési munkában is hasznos:

  • Archirögzített és élő adatok: Egy aktuális tábla és egy archív tábla, amelyek ugyanazokat az oszlopokat használják, együtt is jelentést készíthető, fizikailag nem kell őket egyesíteni.
  • Több forrás, egy jelentés: A tagok és filmek, vagy két régió eladásai egyetlen kimenetben listázhatók a gyors ellenőrzés érdekében.
  • Migrációs ellenőrzések: A régi és az új tábla sorai egymásra rakhatók és összehasonlíthatók, mielőtt a régi táblát eldobnánk.

Az union nem helyettesíti a JOIN műveletet. Az UNION sorokat ad hozzá sorok alá, míg a JOIN oszlopokat ad hozzá oszlopok mellé, és ez a megkülönböztetés dönti el, hogy a feladat melyik operátort kéri.

MySQL UNION szintaxis és szabályok

Most, hogy a cél világos, vizsgáljuk meg az utasítás alakját és az adatbázis által érvényesített szabályokat.

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

Három szabály irányít minden szakszervezetet:

  1. Egyenlő oszlopszám. Minden SELECT utasítás ugyanannyi oszlopot kell visszaadnia, különben MySQL 1222-es hibát okoz.
  2. Kompatibilis adattípusok ugyanabban a sorrendben. Az első lekérdezés első oszlopa megegyezik a második első oszlopával, tehát egy számnak találkoznia kell egy számmal, a szövegnek pedig egy szöveggel.
  3. A nevek az első lekérdezésből származnak. Az eredményhalmaz fejléce az első SELECT-ből származik, ezért minden alias oda tartozik.

An ORDER BY vagy LIMIT A végére helyezett záradék az összesített eredményre vonatkozik, nem pedig annak egyetlen ágára, és az első SELECT által előállított oszlopnevekre kell hivatkoznia.

UNION DISTINCT vs UNION ALL

A szabályok érvényben maradásával a fennmaradó döntés az, hogy a duplikált sorok megmaradjanak-e.

Táblázatok kombinálása a DISTINCT használatával

Hozzunk létre egy UNION lekérdezést, amely a DISTINCT függvény segítségével egyesíti a két táblát.

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

Itt az ismétlődő sorok eltávolításra kerülnek, és csak egyedi sorok jelennek meg.

Union-Distinct

Jegyzet: MySQL a DISTINCT záradékot használja alapértelmezettként az UNION lekérdezések végrehajtásakor, ha nincs megadva.

Táblázatok kombinálása ALL használatával

Hozzunk létre egy UNION lekérdezést, amely az ALL függvény használatával egyesíti a két táblát.

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

Itt a duplikált sorok is szerepelnek, mivel ALL-t használunk.

Unió-Minden

A két kép könnyen láthatóvá teszi a különbséget, az alábbi táblázat pedig összefoglalja azt.

Összehasonlítási pont UNIÓS KÜLÖNBÖZŐ UNIÓ MINDEN
Sorok ismétlése Eltávolítva az eredményből Az eredményben tartva
Alapértelmezett viselkedés Igen, akkor alkalmazzák, ha nincs semmi megadva Nem, az ALL kulcsszót kell beírni
Sebesség Lassabb, deduplikációs lépés szükséges Gyorsabb, a sorok beolvasáskor kerülnek visszaadásra
Legjobb akkor használni, amikor Az egyesített listának egyedi sorokat kell tartalmaznia Minden sor számít, különben nem fordulhatnak elő ismétlődések

💡 Tipp: Ha a két ág nem tud ismétlődő sorokat létrehozni, válassza az ALL UNION opciót. Az adatbázis ekkor kihagyja a DISTINCT által megkövetelt rendezési és összehasonlítási munkát, ami jelentős megtakarítást jelent nagy táblázatok esetén.

Gyakorlati példa a következő használatra: MySQL Workbench

Az eddigi példák minta táblázatokat használtak. Ugyanez a lekérdezés most a valódi myflixdb adatbázison fut, ahol a két tábla meglehetősen eltérő rekordokat tartalmaz.

A myFlixDB-ben kombináljuk a következőket: membership_number és a full_names oszlopok a tagok táblából a movie_id és a title oszlopok a filmek táblából. Mindkét lekérdezés két oszlopot ad vissza, tehát az unió érvényes.

Használhatjuk a következő lekérdezést.

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

A fenti szkript végrehajtása MySQL munkapad A myflixdb függvényen végzett művelet a következő eredményeket adja. Figyeljük meg, hogy a címsorok az első SELECT-ből származnak, annak ellenére, hogy az alsó sorok filmrekordok.

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

GYIK

Az UNION egy lekérdezés sorait egy másik alá halmozza, így az eredmény magasabb lesz. JOIN A kapcsolódó sorokat egyezteti, és az oszlopaikat egymás mellé helyezi, így az eredmény szélesebb lesz. A UNION függvényt hasonló sorokhoz, a JOIN függvényt pedig kapcsolódó táblázatokhoz használjuk.

Helyezzen el egyetlen RENDEZÉS az utolsó SELECT utáni LIMIT záradékot. Ez rendezi az egyesített eredményt, és az első SELECT által létrehozott oszlopneveket kell használnia. Egy ide elhelyezett LIMIT záradék ugyanígy viselkedik.

A 1222-es hiba akkor jelenik meg, ha a SELECT ágak egyenlőtlen oszlopszámot adnak vissza. Számolja meg az egyes ágak oszlopait, és adjon hozzá egy literált vagy egy NULL helykitöltőt a rövidebb ághoz úgy, hogy mindkét oldal ugyanabba a sorrendbe kerüljön.

Igen. Szöveg SQL asszisztensekké, beleértve a beépítetteket is. MySQL Workbench, UNION utasításokat generálhat egy egyszerű kérésből. Ellenőrizze az oszlopok sorrendjét saját maga, mert egy modell képes olyan oszlopokat is igazítani, amelyek csupán hasonlónak tűnnek.

Egy asszisztens javasolhatja az ÖSSZES UNIÓ parancsot, ha a duplikátumok létrehozása lehetetlen, ami gyakori sebességnövelő tényező. A döntés továbbra is az adatoktól függ, ezért a deduplikációs lépés eltávolítása előtt győződjön meg arról, hogy az ágak valóban nem fedhetik át egymást.

Foglald össze ezt a bejegyzést a következőképpen: