MySQL UNION – Teljes oktatóanyag
Mi az az Unió?
Az uniók több SELECT-lekérdezés eredményeit egyesítik egy konszolidált eredményhalmazba.
Ennek működéséhez az egyetlen követelmény, hogy az összes kombinálandó SELECT lekérdezés oszlopainak száma azonos legyen.
Tegyük fel, hogy van két táblázatunk az alábbiak szerint
Most hozzunk létre egy UNION lekérdezést, amely a DISTINCT segítségével kombinálja 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.
Most hozzunk létre egy UNION-lekérdezést, amely mindkét táblát az ALL használatával kombinálja
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Itt a duplikált sorok szerepelnek, és mivel az ALL-t használjuk.
Miért érdemes szakszervezeteket használni?
Tegyük fel, hogy hiba van az adatbázis kialakításában, é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 kihagyja az ismétlődő rekordok bemászását az új táblába. Ilyen esetekben használhatja az UNION-t.
Összegzésként
- Az UNION parancs több SELECT lekérdezés eredményének egyetlen lekérdezésbe való kombinálására szolgál, amely az összes kijelölési lekérdezés sorait tartalmazza.
- Az oszlopok és adattípusok száma a SELECT utasítások azonosnak kell lennie ahhoz, hogy az UNION parancs működjön.
- A DISTINCT záradék az UNION lekérdezés eredménykészletéből a duplikált értékek eltávolítására szolgál. MySQL a DISTINCT záradékot használja alapértelmezettként az UNION lekérdezések végrehajtásakor, ha nincs megadva.
- Az ALL záradék az UNION lekérdezés összes ismétlődő sorának visszaadására szolgál.
Gyakorlati példák a használatára MySQL munkapad
A myFlixDB-ben lehetővé teszi a kombinálást
tagsági_szám és teljes_nevek a Members táblából
dolgoztam, ahol az
movie_id és title a filmek táblázatából
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 ellen az alábbi eredményeket adjuk.
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 |