MySQL UNION – Kompletan vodič

⚡ Pametni sažetak

MySQL UNION kombinira rezultate dvaju ili više SELECT upita u jedan konsolidirani skup rezultata. Ovo objašnjenje pokriva pravila stupaca koja čine uniju valjanom, razliku između UNION DISTINCT i UNION ALL te rađene primjere pokrenute na bazi podataka myflixdb.

  • 🔗 Osnovna svrha: UNION slaže retke vraćene od nekoliko SELECT upita u jedan skup rezultata, jedan upit ispod drugog.
  • 📐 Pravilo stupca: Svaki SELECT mora vratiti isti broj stupaca, istim redoslijedom, s kompatibilnim tipovima podataka.
  • 🧹 RAZLIČITA OSOBA UNIJE: Duplikati se uklanjaju i vraćaju se samo jedinstveni retci, a ovo je ponašanje MySQL primjenjuje se prema zadanim postavkama.
  • 📚 SVE UNIJEDINJENE: Vraća se svaki redak, uključujući duplikate, što je brže jer nije potreban prolaz za uklanjanje duplikata.
  • 🏷️ Nazivi stupaca: Skup rezultata uzima nazive stupaca iz prve SELECT naredbe, tako da aliasi pripadaju tom upitu.
  • 🛠️ Tipična uporaba: Konsolidacija dviju tablica koje sadrže istu vrstu zapisa, bez dopuštanja dupliciranih redaka u spojenom izlazu.

MySQL UNIJA Operahumka

Što je UNIJA u MySQL?

UNIJA je MySQL operator koji kombinira rezultate iz više SELECT upita u konsolidirani skup rezultata. Redci koje vraća drugi upit smještaju se ispod redaka koje vraća prvi, što stvara jedan vertikalni popis umjesto dva odvojena.

Jedini uvjet da bi ovo funkcioniralo je da broj stupaca bude isti iz svih SELECT upita koji se trebaju kombinirati.

Pretpostavimo da imamo dvije tablice kao što slijedi.

MySQL UNIJAMySQL UNIJA

Obje tablice sadrže dva stupca iste vrste, pa su pogodne za uniju. Primjeri koji slijede kombiniraju upravo te dvije tablice.

Zašto koristiti UNION?

Pretpostavimo da postoji greška u dizajnu vaše baze podataka i da koristite dvije različite tablice namijenjene istoj svrsi. Želite objediniti ove dvije tablice u jednu, a istovremeno izostaviti sve duplicirane zapise iz cree...ping u novu tablicu. U takvim slučajevima možete koristiti UNION.

Operator je također koristan u svakodnevnom izvještavanju:

  • Archipodaci uživo i podaci uživo: Trenutna tablica i arhivska tablica koje dijele iste stupce mogu se izvješćivati ​​zajedno, bez fizičkog spajanja.
  • Nekoliko izvora, jedno izvješće: Članovi i filmovi ili prodaja iz dvije regije mogu se navesti u jednom izlazu za brzu reviziju.
  • Provjere migracije: Redci iz stare i nove tablice mogu se slagati i uspoređivati ​​prije nego što se stara tablica ukloni.

Unija nije zamjena za JOIN. UNION dodaje retke ispod redaka, dok JOIN dodaje stupce pored stupaca, a ta razlika određuje koji operator zadatak poziva.

MySQL Sintaksa i pravila UNION-a

Sada kada je svrha jasna, pogledajte oblik naredbe i pravila koja baza podataka provodi.

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

Tri pravila reguliraju svaki sindikat:

  1. Jednak broj stupaca. Svaki SELECT izraz mora vratiti isti broj stupaca, inače MySQL javlja grešku 1222.
  2. Kompatibilni tipovi podataka istim redoslijedom. Prvi stupac prvog upita podudara se s prvim stupcem drugog, tako da se broj treba podudarati s brojem, a tekst s tekstom.
  3. Imena dolaze iz prvog upita. Zaglavlje skupa rezultata uzima se iz prvog SELECT-a, zbog čega bilo koji alias pripada tamo.

An ORDER BY ili LIMIT Klauzula smještena na kraju primjenjuje se na kombinirani rezultat, a ne na jednu njegovu granu, i mora referencirati nazive stupaca koje je generirao prvi SELECT.

UNION DISTINCT vs UNION ALL

S obzirom na ta pravila, preostala je odluka hoće li duplicirani retci preživjeti.

Kombiniranje tablica pomoću DISTINCT-a

Sada kreirajmo UNION upit za kombiniranje obje tablice koristeći DISTINCT.

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

Ovdje se duplicirani retci uklanjaju i vraćaju se samo jedinstveni retci.

Union-Distinct

Bilješka: MySQL koristi klauzulu DISTINCT kao zadanu prilikom izvršavanja UNION upita ako ništa nije navedeno.

Kombiniranje tablica pomoću naredbe ALL

Sada kreirajmo UNION upit za kombiniranje obje tablice koristeći ALL.

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

Ovdje su uključeni duplicirani retci, budući da koristimo SVE.

Savez-Sve

Dvije slike lako uočavaju razliku, a tablica u nastavku je sažima.

Točka usporedbe UNIJA DISTINKT SAVEZ SVE
Duplicirani redovi Uklonjeno iz rezultata Zadržano u rezultatu
Zadano ponašanje Da, primjenjuje se kada ništa nije navedeno Ne, ključna riječ SVE mora biti napisana
Brzina Sporije, potreban je prolaz za deduplikaciju Brže, retci se vraćaju čim se pročitaju
Najbolje koristiti kada Spojeni popis mora sadržavati jedinstvene retke Svaki red je važan, inače se ne mogu pojaviti duplikati

💡 Savjet: Ako dvije grane ne mogu proizvesti duplicirane retke, odaberite UNION ALL. Baza podataka tada preskače sortiranje i usporedbu koje zahtijeva DISTINCT, što je značajna ušteda na velikim tablicama.

Praktični primjer korištenja MySQL Radna tezga

Dosadašnji primjeri koristili su uzorke tablica. Isti upit sada se izvršava na stvarnoj bazi podataka myflixdb, gdje dvije tablice sadrže prilično različite zapise.

U našoj myFlixDB bazi podataka, kombinirajmo membership_number i full_names stupci iz tablice članova s movie_id i title stupci iz tablice filmova. Oba upita vraćaju dva stupca, pa je unija valjana.

Možemo koristiti sljedeći upit.

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

Izvršavanje gornje skripte u MySQL radna tezga u odnosu na myflixdb dobivamo sljedeće rezultate prikazane u nastavku. Primijetite da naslovi dolaze iz prvog SELECT-a, iako su donji retci zapisi filmova.

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

Pitanja i odgovori

UNION slaže retke jednog upita ispod drugog, tako da rezultat postaje viši. PRIDRUŽITE spaja povezane retke i postavlja njihove stupce jedan pored drugog, tako da rezultat postaje širi. Koristite UNION za slične retke i JOIN za povezane tablice.

Postavite jednu NARUČITE PO klauzula nakon zadnjeg SELECT-a. Sortira kombinirani rezultat i mora koristiti nazive stupaca koje je generirao prvi SELECT. LIMIT klauzula postavljena tamo ponaša se na isti način.

Pogreška 1222 pojavljuje se kada SELECT grane vrate nejednak broj stupaca. Prebrojite stupce u svakoj grani i dodajte literal ili NULL rezervirano mjesto kraćoj grani tako da se obje strane poravnaju istim redoslijedom.

Da. Pomoćnici za slanje teksta u SQL, uključujući one ugrađene u MySQL Radna tezga, generirajte UNION naredbe iz običnog zahtjeva. Sami provjerite redoslijed stupaca, jer model može poravnati stupce koji samo izgledaju slično.

Asistent može predložiti UNION ALL kada duplikati nisu mogući, što je uobičajena prednost u brzini. Odluka i dalje ovisi o podacima, stoga prije uklanjanja koraka deduplikacije provjerite da se grane zaista ne mogu preklapati.

Sažmite ovu objavu uz: