mysql union comprehensive tutorial with union examples
Ovaj vodič objašnjava naredbu MySQL UNION, njegove vrste, Union vs Union All i primjere za kombiniranje podataka iz 2 ili više upita:
MySQL UNION koristi se za kombiniranje rezultata iz više SELECT upita u jedan skup rezultata. Također je moguće imati sve složene upite / operacije u SELECT upitima i izvesti UNION s ostalim SELECT izrazima kako bi se dobio kombinirani rezultat.
što je mrežni ključ na usmjerivaču
Zadana karakteristika izjave UNION bila bi uklanjanje dvostrukih unosa ili redaka iz rezultirajućeg skupa redaka, međutim, pruža načine za dohvaćanje duplikata zapisa koristeći i klauzulu UNION ALL.
Što ćete naučiti:
- Razumijevanje UNIJE kroz teoriju skupova
- Koji problem rješava MySQL UNION
- MySQL UNION vs UNION ALL
- Zaključak
Razumijevanje UNIJE kroz teoriju skupova
Operacija UNION mogla bi se vrlo dobro razumjeti iz načela SET teorije.
Pretpostavimo da imamo tablice A i B predstavljene nizovima dolje i da oni imaju neke podatke koji se preklapaju (ili mogu biti i potpuno nepovezani) - UNION će sadržavati kombinaciju podataka iz obje tablice.
Pogledajmo primjer gdje skupovi A i B imaju neke zajedničke elemente. UNION će sadržavati sve vrijednosti iz skupa A i B s izostavljenim duplikatima.
Što ako su skupovi A i B disjunktni i ne sadrže nikakve zajedničke elemente? I ovdje će UNION vratiti isti rezultat.
Razmotrimo scenarij u kojem postoje elementi koji se preklapaju između skupova i želimo da se dvostruke vrijednosti također pojave u skupu rezultata.
MySQL pruža način da to učinite pomoću opcije UNION ALL, kao što je prikazano na donjoj slici.
Koji problem rješava MySQL UNION
MySQL UNION koristi se kada imate slične podatke u 2 ili više tablica i želite vidjeti kombinirani prikaz podataka sadržanih u obje tablice, a ne pokretanje SELECT izraza za pojedine tablice.
Na primjer - Pretpostavimo da postoje 2 tablice - Zaposlenik i Student. I radite na bazi podataka o osobama koja samo želi imati ime, dob i datum rođenja za sve zaposlenike i studente.
Bez UNION-a, morat ćete izvršiti zasebne SELECT upite za obje tablice, a zatim izvršiti željeno izračunavanje s dobivenim skupom rezultata.
Sintaksa MySQL UNION
Upiti u nastavku vratit će UNION od 2 ili više od 2 SELECT izraza.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Pokušajmo vidjeti različite komponente sintakse
- Možemo vidjeti da je moguće kombinirati višestruke SELECT upite s UNION-om kako bi se dobio rezultirajući redak.
- Naziv stupca i vrste podataka: važno je razumjeti da stupci koje želimo kombinirati trebaju imati isti ili kompatibilni tip podataka. Na primjer: ako imate stupac1 kao STRING, onda bi i stupac3 trebao biti STRING (ili STRING kompatibilan).
- Imena i položaji stupaca određuju se iz prve naredbe SELECT u UNION upitu. Na primjer, u gornjoj sintaksi: stupac1 i stupac2 imenovani su kao stupci zaglavlja u skupu rezultata, a vrijednosti stupca3 i stupca4 mapiraju se u stupac1, odnosno stupac2.
- Rezultati UNION upita prema zadanim postavkama uklanjaju dvostruke unose. Na primjer, u ovom slučaju, ako postoji duplicirani unos koji se točno podudara i ima iste vrijednosti za stupac1 i stupac2, ti će retci biti izostavljeni iz skupa rezultata.
Ako se žele duplikati, tada možemo upotrijebiti opciju ‘SVE’ zajedno s UNIONOM.
Korištenje RAZLIKUJ podrazumevano se podrazumijeva. Napominjemo da bi se moglo izričito navesti i da bi se postigla veća čitljivost.
Pogledajmo primjer primjera upita UNION.
Pretpostavimo da postoje 2 tablice - zaposlenica i student - svaka od kojih ima osobne podatke.
CREATE TABLE employee (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100)); CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(100), age INT, dob DATE, department VARCHAR(100));
Sada unesite neke lažne podatke u obje ove tablice kao što je prikazano dolje:
INSERT INTO employee values (1,'Darren', 32, '1988-05-20', 'ENGINEERING'), (2,'Abhishek', 28, '1992-05-20', 'ACCOUNTING'), (3,'Amit', 30, '1990-09-20', 'ENGINEERING'), (4,'Steven', 40, '1980-05-21', 'HUMAN RESOURCES'), (5,'Kartik', 20, '2000-05-12', 'TRAINEE'); ---------------------------------------------- INSERT INTO student values (1,'Akash', 22, '1998-05-17', 'COMPUTER'), (2,'Ian', 26, '1994-06-18', 'COMPUTER'), (3,'Shirley', 19, '2001-11-20', 'MECHANICAL'), (4,'Joana', 21, '1999-05-21', 'ELECTRONICS'), (5,'Kartik', 20, '2000-05-12', 'COMPUTER');
Kao što vidite gore, namjerno smo dodali redak koji ima iste atribute za ime, dob i datum rođenja.
Pogledajmo sada kako možemo kombinirati podatke u ove 2 tablice pomoću naredbi UNION. Upitat ćemo korisničko ime i dob iz obje tablice.
Jednostavna UNIJA
Upit:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
U rezultatu ćete vidjeti 9 zapisa (što znači da je gornji upit izostavio duplicirani unos).
Izlaz:
Ime | dob |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | dvadeset |
Akaš | 22 |
Shirley | 19 |
Joana | dvadeset i jedan |
UNIJA S UNIJOM SVE
Korištenje klauzule UNION s ALL osigurat će da se prikažu i duplicirani unosi.
Upit:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Izlaz:
Ime | dob |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | dvadeset |
Akaš | 22 |
Shirley | 19 |
Joana | dvadeset i jedan |
Kartik | dvadeset |
UNIJA sa stanjem
Dodajmo uvjete u SELECT izjave gdje želimo podatke o zaposlenicima mlađim od 30 godina i studentima mlađim od 25 godina.
Upit:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Izlaz:
Ime | dob |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | dvadeset |
Akaš | 22 |
Shirley | 19 |
Joana | dvadeset i jedan |
Kao što vidite gore, skup rezultata uključuje kombinirani rezultat s potvrđenim pojedinačnim SELECT uvjetima.
Naručivanje rezultata UNION-a
Rezultati UNION upita prema zadanim postavkama nisu uređeni.
Da bi se nametnuo poredak po stupcu koji postoji u rezultirajućem skupu, na kraju naredbe UNION može se odrediti klauzula ORDER BY.
Upotrijebimo iste podatke o zaposlenicima / studentima i naručimo rezultate UNION-a uzlaznim redoslijedom prema dobi.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Izlaz:
Ime | dob |
---|---|
Shirley | 19 |
Kartik | dvadeset |
Joana | dvadeset i jedan |
Akaš | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
Gornji skup rezultata poredan je prema dobnim vrijednostima u porastu. Također možemo koristiti pseudonime stupaca za upućivanje na stupce u odredbi ORDER BY.
Na primjer: - Upit poput dolje također će dati isti rezultat.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Postoji još jedan način korištenja klauzule ORDER BY spominjanjem položaja stupca umjesto imena stupca.
Na primjer: U gornjem UNION upitu odabiremo ime i dob što implicira da su ti stupci na pozicijama 1 i 2.
Dakle, ZA REDOSLIJED PO dobi možemo jednostavno odrediti položaj umjesto stvarnog imena stupca.
Stoga će i upit u nastavku dati isti rezultat.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION vs UNION ALL
MySQL nudi 2 varijante UNION-a tj. UNIJALNO RAZLIKUJU i SAVEZ SVE
Imajte na umu da se DISTINCT podrazumevano podrazumijeva, čak i ako nije naveden.
Glavna razlika između njih obje je UNION ALL omogućuje kombiniranje i vraćanje dupliciranih redaka, dok UNION samo vraća kombinirane retke uklanjajući duplikate.
Tablica u nastavku objašnjava detalje:
Parametar | UNIJA | SAVEZ SVE |
---|---|---|
Definicija | Ekvivalentan je UNION DISTINCT - zanemaruje dvostruke retke podataka dok vraća rezultat | Vraća sve retke, uključujući duplikate |
Sintaksa | ODABERITE {columnList} IZ {tablice1} UNIJA ODABERITE {columnList} IZ {table2} | ODABERITE {columnList} IZ {tablice1} SAVEZ SVE ODABERITE {columnList} IZ {table2} |
Zahtjevi za podacima | Podaci koji se kombiniraju trebali bi imati slične vrste podataka i trebali bi se dohvaćati istim redoslijedom kada se preuzimaju iz više tablica | Isto kao i UNION |
Često postavljana pitanja
P # 1) Je li Union brži od JOIN?
Odgovor: UNION i JOINs koriste se u praktički dvije različite svrhe.
Tehnički gledano, UNION je puno brži od JOIN (posebno za velike skupove podataka) jer UNION samo spaja redove podataka iz pojedinačnih SELECT izraza.
P # 2) Što je UNION ALL operator?
Odgovor: Slično kao i UNION, operator UNION ALL također vraća UNION između 2 SELECT upita, ali razlika je u tome što sadrži i duplicirane retke / unose.
P # 3) Koja je razlika između UNION i JOIN?
Odgovor: I UNION i JOIN koriste se za kombiniranje podataka iz 2 ili više tablica. Ali postoji ogromna razlika u pogledu dobivenog skupa rezultata i načina dohvaćanja podataka.
Sličnosti i razlike između JOIN i UNION navedene su u donjoj tablici:
UNIJA | PRIDRUŽITI |
---|---|
Kombinira podatke iz više tablica | Kombinira podatke iz više tablica |
Ne zahtijeva nikakve posebne uvjete za uspoređivanje ili kombiniranje podataka | JOIN radi pod uvjetom JOIN koji je potreban za provjeru valjanosti podataka koji dolaze u skupu rezultata |
Podaci iz različitih tablica uzimaju se kao različiti retci skupa rezultata | Podaci iz različitih tablica kombiniraju se u jedan redak - za jedan redak u skupu rezultata može sadržavati 2 stupca iz tablice1, 3 stupca iz tablice 2 itd., Ovisno o stanju PRIDRUŽIVANJA i UPITU SELECT |
SINDIKATI su jednostavni i jasni | PRIDRUŽIVANJA zahtijevaju složene uvjete i ovisno o potrebama mogu se koristiti više vrsta spajanja poput INNER / OUTER itd. |
Zaključak
U ovom uputstvu naučili smo o korištenju MySQL UNION za kombiniranje podataka iz 2 ili više SELECT izjava.
Izjava UNION zaista je korisna za prikupljanje sličnih podataka iz velikih skupova različitih tablica i zatim pokretanje analize kombiniranih podataka.
Naredba UNION također podržava klauzulu ALL koja omogućuje i dohvaćanje duplikata zapisa.
Preporučena literatura
- Što je MySQL i zašto se koristi?
- Razlika između SQL Vs MySQL Vs SQL Server (s primjerima)
- Unutarnje pridruživanje protiv vanjskog spajanja: točna razlika s primjerima
- MySQL JOIN Vodič: Unutarnji, vanjski, križni, lijevi, desni i ja
- MySQL Vodič za stvaranje pogleda s primjerima koda
- MySQL Vodič za izradu tablica s primjerima
- Vodič za izjavu o ažuriranju MySQL - Sintaksa upita i ažuriranje primjera
- 40 najboljih pitanja i odgovora za intervju za MySQL (2021 pitanje)