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.

  • 🔗 Põhieesmärk: Funktsioon UNION koondab mitme SELECT-päringu tagastatud read ühte tulemuste komplekti, üks päring teise alla.
  • 📐 Veeru reegel: Iga SELECT peab tagastama sama arvu veerge, samas järjekorras ja ühilduvate andmetüüpidega.
  • 🧹 LIIDU ERINEVUS: Duplikaatread eemaldatakse ja tagastatakse ainult unikaalsed read ning see ongi käitumine MySQL kehtib vaikimisi.
  • 📚 LIIT KÕIK: Tagastati iga rida, kaasa arvatud duplikaadid, mis on kiirem, kuna duplikaatide eemaldamise etappi pole vaja.
  • ???? ️ Veergude nimed: Tulemuste komplekt võtab oma veerunimed esimesest SELECT-lausest, seega kuuluvad aliased sellesse päringusse.
  • 🛠️ Tüüpiline kasutus: Kahe sama tüüpi kirjeid sisaldava tabeli konsolideerimine ilma ühendatud väljundisse topeltridu lisamata.

MySQL LIIDU Operator

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.

MySQL LIIDUMySQL LIIDU

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:

  1. Võrdne veergude arv. Tk SELECT avaldus peab tagastama sama arvu veerge, vastasel juhul MySQL tekitab vea 1222.
  2. Ü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.
  3. 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.

Liit-eriti

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.

Liit-Kõik

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

KKK

UNION virnastab ühe päringu read teise alla, nii et tulemus kasvab kõrgemaks. LIITU leiab vasted seotud ridade ja asetab nende veerud kõrvuti, nii et tulemus laieneb. Kasutage sarnaste ridade jaoks UNION ja seotud tabelite jaoks JOIN.

Aseta üksik TELLI klausel pärast viimast SELECT-käsku. See sorteerib kombineeritud tulemuse ja peab kasutama esimese SELECT-käsu poolt genereeritud veerunimesid. Sinna paigutatud LIMIT-klausel käitub samamoodi.

Viga 1222 ilmub siis, kui SELECT-harud tagastavad ebavõrdse veergude arvu. Loendage iga haru veerud ja lisage lühemale harule literaal või NULL-kohatäide, nii et mõlemad pooled oleksid samas järjekorras.

Jah. Teksti saatmine SQL-i assistentideks, sh sisseehitatud MySQL Workbench, genereeri UNION-lauseid tavalisest päringust. Kontrolli veergude järjekorda ise, sest mudel suudab joondada veerge, mis lihtsalt näevad sarnased välja.

Assistent saab soovitada UNION ALLi, kui duplikaatide loomine pole võimalik, mis on sageli kiiruse eelis. Otsus sõltub ikkagi andmetest, seega veenduge enne dubleerimise eemaldamise etapi eemaldamist, et harud ei saa tõepoolest kattuda.

Võta see postitus kokku järgmiselt: