MySQL LIIT – täielik õpetus
⚡ Nutikas kokkuvõte
MySQL Funktsioon UNION ühendab kahe või enama SELECT-päringu tulemused üheks konsolideeritud tulemuste komplektiks. See selgitus käsitleb veerureegleid, mis muudavad ühenduse kehtivaks, UNION DISTINCT ja UNION ALL erinevust ning töönäiteid, mis on käivitatud myflixdb andmebaasis.
Mis on AMETLIIT MySQL?
LIIDU on MySQL operaator, mis ühendab mitme SELECT-päringu tulemused konsolideeritud tulemuste komplektiks. Teise päringu tagastatud read paigutatakse esimese tagastatud ridade alla, mis loob ühe vertikaalse loendi kahe eraldi loendi asemel.
Ainus nõue selle toimimiseks on see, et kõigi ühendatavate SELECT-päringute veergude arv peaks olema sama.
Oletame, et meil on kaks järgmist tabelit.
Mõlemad tabelid sisaldavad kahte sama tüüpi veergu, seega saab neid ühendada. Järgnevad näited ühendavad täpselt need kaks tabelit.
Miks kasutada UNIONi?
Oletame, et teie andmebaasi ülesehituses on viga ja te kasutate kahte erinevat tabelit, mis on mõeldud samaks otstarbeks. Soovite need kaks tabelit ühendada üheks, jättes cree-st välja kõik duplikaatkirjed.ping uude tabelisse. Sellistel juhtudel saate kasutada funktsiooni UNION.
Operaator on kasulik ka igapäevases aruandlustöös:
- Archisalvestatud ja reaalajas andmed: Praegust tabelit ja arhiivitabelit, millel on samad veerud, saab aru anda koos, ilma neid füüsiliselt ühendamata.
- Mitmed allikad, üks aruanne: Kiire auditi jaoks saab liikmeid ja filme või kahe piirkonna müüki kuvada ühes väljundis.
- Migratsioonikontrollid: Vana tabeli ja uue tabeli ridu saab enne vana tabeli eemaldamist virnastada ja võrrelda.
Ühendusoperatsioon (union) ei asenda JOIN-i. UNION lisab ridade alla ridu, samas kui JOIN lisab veerge veergude kõrvale ja see eristamine otsustab, millist operaatorit ülesanne nõuab.
MySQL UNIONi süntaks ja reeglid
Nüüd, kui eesmärk on selge, vaadake lause kuju ja reegleid, mida andmebaas jõustab.
SELECT column1, column2 FROM `table1` UNION [DISTINCT | ALL] SELECT column1, column2 FROM `table2`;
Iga ametiühingu puhul kehtivad kolm reeglit:
- Võrdne veergude arv. Tk SELECT avaldus peab tagastama sama arvu veerge, vastasel juhul MySQL tekitab vea 1222.
- Ühilduvad andmetüübid samas järjekorras. Esimese päringu esimene veerg vastendatakse teise päringu esimese veeruga, seega peaks arv vastama arvule ja tekst peaks vastama tekstile.
- Nimed pärinevad esimesest päringust. Tulemuste komplekti päis võetakse esimesest SELECT-ist, mistõttu kõik aliased kuuluvad sinna.
An ORDER BY või LIMIT Lõppu paigutatud klausel kehtib pigem kombineeritud tulemuse kui selle ühe haru kohta ning see peab viitama esimese SELECT-i loodud veerunimedele.
UNION DISTINCT vs UNION ALL
Kui reeglid on paigas, jääb üle otsustada, kas duplikaatread peaksid jääma alles.
Tabelite kombineerimine funktsiooni DISTINCT abil
Loome nüüd UNION-päringu, mis ühendab mõlemad tabelid funktsiooni DISTINCT abil.
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1, column2 FROM `table2`;
Siin eemaldatakse topeltread ja tagastatakse ainult kordumatud read.
Märge: MySQL kasutab UNION-i päringute täitmisel vaikimisi klauslit DISTINCT, kui midagi pole määratud.
Tabelite kombineerimine funktsiooni ALL abil
Loome nüüd UNION-päringu, mis ühendab mõlemad tabelid funktsiooni ALL abil.
SELECT `column1`, `column2` FROM `table1` UNION ALL SELECT `column1`, `column2` FROM `table2`;
Siia on kaasatud ka duplikaatread, kuna me kasutame funktsiooni ALL.
Kaks pilti teevad erinevuse kergesti nähtavaks ja allolev tabel võtab selle kokku.
| Võrdluspunkt | LIIDU ERINEV | LIIT KÕIK |
|---|---|---|
| Dubleerivad read | Tulemusest eemaldatud | Tulemuses hoitud |
| Vaikimisi käitumine | Jah, rakendatakse, kui midagi pole täpsustatud | Ei, märksõna ALL tuleb kirjutada |
| Kiirus | Aeglasem, vajalik on dubleerimise eemaldamise etapp | Kiiremini, read tagastatakse lugemise ajal |
| Parim kasutada siis, kui | Ühendatud loend peab sisaldama unikaalseid ridu | Iga rida on oluline, vastasel juhul ei saa duplikaate tekkida. |
💡 Näpunäide: Kui need kaks haru ei suuda duplikaatridu luua, valige UNION ALL. Seejärel jätab andmebaas vahele sortimis- ja võrdlustöö, mida DISTINCT nõuab, mis on suurte tabelite puhul märgatav kokkuhoid.
Praktiline näide kasutamise kohta MySQL Workbench
Senised näited kasutasid näidistabeleid. Sama päring töötab nüüd ka päris myflixdb andmebaasis, kus kahes tabelis on üsna erinevad kirjed.
Meie myFlixDB-s ühendame membership_number ja full_names liikmete tabeli veerud koos movie_id ja title veerud filmide tabelist. Mõlemad päringud tagastavad kaks veergu, seega on ühend kehtiv.
Me saame kasutada järgmist päringut.
SELECT `membership_number`, `full_names` FROM `members` UNION SELECT `movie_id`, `title` FROM `movies`;
Ülaltoodud skripti käivitamine MySQL töölaud myflixdb vastuvõtmine annab meile järgmised tulemused. Pane tähele, et pealkirjad pärinevad esimesest SELECT-ist, kuigi alumised read on filmikirjed.
| 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 |





