mysql union comprehensive tutorial with union examples
Acest tutorial explică comanda MySQL UNION, tipurile sale, Union vs Union All și exemple pentru a combina date din 2 sau mai multe interogări:
MySQL UNION este utilizat pentru a combina rezultatele din mai multe interogări SELECT într-un singur set de rezultate. De asemenea, este posibil să aveți toate interogările / operațiile complexe din interogările SELECT și să efectuați UNION cu alte instrucțiuni SELECT pentru a obține un rezultat combinat.
Caracteristica implicită a unei instrucțiuni UNION ar fi eliminarea intrărilor sau rândurilor duplicate din setul de rânduri rezultat, cu toate acestea, oferă modalități de a prelua înregistrările duplicate, folosind și clauza UNION ALL.
Ce veți învăța:
- Înțelegerea UNIUNII prin teoria seturilor
- Ce problemă rezolvă MySQL UNION
- MySQL UNION VS UNION ALL
- Concluzie
Înțelegerea UNIUNII prin teoria seturilor
Operațiunea UNION ar putea fi foarte bine înțeleasă din principiile teoriei SET.
Să presupunem că avem tabele A și B așa cum sunt reprezentate de seturile de mai jos și că au unele date care se suprapun (sau poate fi și total fără legătură) - UNION va include combinația de date din ambele tabele.
Să vedem un exemplu în care seturile A & B au câteva elemente comune. UNION va conține toate valorile din setul A & B cu valorile duplicate omise.
Acum, dacă seturile A și B sunt disjuncte și nu conțin elemente comune? Și aici, UNIUNEA va întoarce același rezultat.
Să discutăm scenariul în care există elemente care se suprapun între seturi și dorim ca valorile duplicate să apară și în setul de rezultate.
MySQL oferă o modalitate de a face acest lucru folosind opțiunea UNION ALL așa cum se arată în imaginea de mai jos.
Ce problemă rezolvă MySQL UNION
MySQL UNION este utilizat atunci când aveți date similare în 2 sau mai multe tabele și doriți să vedeți o vizualizare combinată a datelor conținute în ambele tabele, mai degrabă decât să executați instrucțiuni SELECT pentru tabele individuale.
De exemplu - Să presupunem că există 2 tabele - Angajat și Student. Și lucrați la o bază de date de persoane care vrea doar să aibă un nume, vârsta și data nașterii pentru toți angajații și studenții.
Fără UNION, va trebui să executați interogări SELECT separate pentru ambele tabele și apoi să efectuați calculul dorit cu setul de rezultate obținut.
Sintaxa MySQL UNION
Interogările de mai jos vor returna UNION de 2 sau mai mult de 2 instrucțiuni SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Să încercăm să vedem diferite componente ale sintaxei
- Putem vedea că este posibil să combinați mai multe interogări SELECT cu UNION pentru a obține setul de rânduri rezultate.
- Numele coloanelor și tipurile de date: este important să înțelegem că coloanele pe care dorim să le combinăm ar trebui să aibă același tip de date sau compatibile. De exemplu: dacă aveți coloana 1 ca STRING, atunci coloana 3 ar trebui să fie și STRING (sau compatibil STRING).
- Numele și pozițiile coloanelor sunt determinate din prima instrucțiune SELECT din interogarea UNION. De exemplu, în sintaxa de mai sus: coloana1 și coloana2 sunt denumite coloane de antet în setul de rezultate, iar valorile coloanei3 și coloanei4 sunt mapate la coloana1 și respectiv coloana2.
- Rezultatele unei interogări UNION în mod implicit elimină intrările duplicate. De exemplu, în acest caz, dacă există o intrare duplicat care are o potrivire exactă și are aceleași valori pentru coloana 1 și coloana 2, atunci aceste rânduri vor fi omise din setul de rezultate.
Dacă se doresc duplicate, atunci putem folosi opțiunea „ALL” împreună cu UNION.
Utilizarea DISTINCT este implicit implicit. Vă rugăm să rețineți că ar putea fi specificat în mod explicit și pentru a avea mai multă lizibilitate.
Să vedem un exemplu de interogare UNION.
Să presupunem că există 2 tabele - angajat și student - fiecare având informații personale.
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));
Acum, introduceți câteva date fictive în ambele tabele așa cum se arată mai jos:
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');
După cum puteți vedea mai sus, am adăugat intenționat un rând care are aceleași atribute pentru nume, vârstă și data nașterii.
Să vedem acum cum putem combina datele din aceste 2 tabele folosind comenzile UNION. Vom interoga numele de utilizator și vârsta de pe ambele tabele.
UNIUNE simplă
Interogare:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Veți vedea 9 înregistrări în rezultat (ceea ce înseamnă că interogarea de mai sus a omis intrarea duplicat).
Ieșire:
Nume | vârstă |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | douăzeci |
Akash | 22 |
Shirley | 19 |
Joana | douăzeci și unu |
UNION Cu UNION ALL
Utilizarea clauzei UNION cu ALL vă va asigura că intrările duplicate vor fi afișate și ele.
Interogare:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Ieșire:
Nume | vârstă |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | douăzeci |
Akash | 22 |
Shirley | 19 |
Joana | douăzeci și unu |
Kartik | douăzeci |
UNIUNEA Cu condiție
Să adăugăm condiții la declarațiile SELECT în care dorim date despre angajații cu vârsta sub 30 și studenții cu vârsta sub 25.
Interogare:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Ieșire:
Nume | vârstă |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | douăzeci |
Akash | 22 |
Shirley | 19 |
Joana | douăzeci și unu |
După cum puteți vedea mai sus, setul de rezultate include rezultatul combinat cu condiții de selectare individuale validate.
Comandarea rezultatelor UNION
Rezultatele unei interogări UNION nu sunt ordonate în mod implicit.
Pentru a impune o ordonare după o coloană existentă în setul rezultat, o clauză ORDER BY poate fi specificată la sfârșitul comenzii UNION.
Să folosim aceleași date despre angajați / studenți și să ordonăm rezultatele UNION în ordine crescătoare după vârstă.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Ieșire:
Nume | vârstă |
---|---|
Shirley | 19 |
Kartik | douăzeci |
Joana | douăzeci și unu |
Akash | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
Setul de rezultate de mai sus este ordonat în funcție de valorile vârstei în ordine crescătoare. De asemenea, putem folosi aliasuri de coloane pentru a ne referi la coloanele din clauza ORDER BY.
De exemplu: - O interogare ca cea de mai jos va produce, de asemenea, același rezultat.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Există un alt mod de a utiliza clauza ORDER BY doar menționând poziția coloanei în locul numelui coloanei.
De exemplu: În interogarea UNION de mai sus, selectăm numele și vârsta, ceea ce implică faptul că aceste coloane sunt la pozițiile 1 și respectiv 2.
Deci, pentru a ORDONA ÎN funcție de vârstă, putem specifica pur și simplu poziția în loc de numele coloanei reale.
Prin urmare, interogarea de mai jos va produce și același rezultat.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION VS UNION ALL
MySQL oferă 2 variante de UNION adică UNION DISTINCT și UNION TOATE
Vă rugăm să rețineți că DISTINCT este implicit implicit, chiar dacă nu este specificat.
Diferența majoră dintre ambele este că UNION ALL permite combinarea și returnarea rândurilor duplicate, în timp ce UNION returnează rândurile combinate eliminând duplicatele.
Tabelul de mai jos explică detaliile:
Parametru | UNIUNE | UNION TOATE |
---|---|---|
Definiție | Este echivalent cu UNION DISTINCT - ignoră rândurile duplicate de date în timp ce returnează rezultatul | Returnează toate rândurile, inclusiv duplicatele |
Sintaxă | Selectați {columnList} FROM {table1} UNIUNE Selectați {columnList} FROM {table2} | Selectați {columnList} FROM {table1} UNION TOATE Selectați {columnList} FROM {table2} |
Cerințe privind datele | Datele combinate trebuie să aibă tipuri de date similare și trebuie preluate în aceeași ordine atunci când sunt preluate din mai multe tabele | La fel ca UNION |
întrebări frecvente
Q # 1) Este Uniunea mai rapidă decât ÎNREGISTRARE?
Răspuns: UNION și JOIN sunt utilizate practic în 2 scopuri diferite.
Din punct de vedere tehnic, UNION este mult mai rapid decât JOIN (în special pentru seturi de date mari), deoarece UNION doar concatenează rânduri de date din instrucțiunile individuale SELECT.
Q # 2) Ce este operatorul UNION ALL?
Răspuns: Similar cu UNION, operatorul UNION ALL returnează și UNION între 2 interogări SELECT, dar diferența este că conține și rândurile / intrările duplicate.
Î # 3) Care este diferența dintre UNION și JOIN?
Răspuns: Atât UNION, cât și JOIN sunt utilizate pentru a combina date din 2 sau mai multe tabele. Dar există o diferență uriașă în ceea ce privește setul de rezultate obținut și modul în care sunt preluate datele.
Asemănările și diferențele dintre JOIN și UNION sunt prezentate în tabelul de mai jos:
UNIUNE | A TE ALATURA |
---|---|
Combină date din mai multe tabele | Combină date din mai multe tabele |
Nu necesită nicio condiție specifică pentru a strânge sau combina date | JOIN funcționează pe o condiție JOIN care este necesară pentru validarea datelor care vin în setul de rezultate |
Datele din diferite tabele sunt luate ca rânduri diferite ale setului de rezultate | Datele din diferite tabele sunt combinate într-un singur rând - de exemplu, un rând din setul de rezultate ar putea conține 2 coloane din tabelul 1, 3 coloane din tabelul 2 etc., în funcție de condiția JOIN și interogarea SELECT. |
UNIUNILE sunt simple și directe | JOINS necesită condiții complexe și, în funcție de necesități, pot fi utilizate mai multe tipuri de îmbinări, cum ar fi INNER / OUTER etc. |
Concluzie
În acest tutorial, am aflat despre utilizarea MySQL UNION pentru a combina date din 2 sau mai multe instrucțiuni SELECT.
Declarația UNION este cu adevărat utilă pentru strângerea de date similare din seturi mari de tabele diferite și apoi efectuarea unei analize a datelor combinate.
Comanda UNION acceptă, de asemenea, o clauză ALL care permite preluarea înregistrărilor duplicate.
Lectură recomandată
- Ce este MySQL și de ce este folosit?
- Diferența dintre SQL și MySQL împotriva SQL Server (cu exemple)
- Alăturare interioară Vs Alăturare exterioară: Diferență exactă cu exemple
- MySQL JOIN Tutorial: interior, exterior, încrucișat, stânga, dreapta și sine
- Tutorial MySQL Create View cu exemple de cod
- Tutorial MySQL Create Table cu exemple
- Tutorial MySQL Update Statement - Actualizați sintaxa interogării și exemple
- Top 40 cele mai bune întrebări și răspunsuri la interviu MySQL (2021 întrebări)