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.

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.
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:
- Egyenlő oszlopszám. Minden SELECT utasítás ugyanannyi oszlopot kell visszaadnia, különben MySQL 1222-es hibát okoz.
- 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.
- 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.
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.
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 |




