mysql union comprehensive tutorial with union examples
Aquest tutorial explica l'ordre MySQL UNION, els seus tipus, Union vs Union All i exemples per combinar dades de 2 o més consultes:
MySQL UNION s'utilitza per combinar els resultats de diverses consultes SELECT en un conjunt de resultats únic. També és possible tenir totes les consultes / operacions complexes de les consultes SELECT i realitzar UNION amb altres sentències SELECT per obtenir un resultat combinat.
el millor programari de conversió de vídeo per a Windows 10
La característica per defecte d’una declaració UNION seria eliminar les entrades o files duplicades del conjunt de files resultant, però, també proporciona maneres d’obtenir els registres duplicats mitjançant la clàusula UNION ALL.
Què aprendreu:
- Comprendre la UNIÓ a través de la teoria de conjunts
- Quin problema resol MySQL UNION
- MySQL UNION Vs UNION ALL
- Conclusió
Comprendre la UNIÓ a través de la teoria de conjunts
L’operació de la UNIÓ es podria entendre molt bé a partir dels principis de la teoria de SET.
Suposem que tenim les taules A i B tal com es representen mitjançant conjunts a continuació i que tenen algunes dades superposades (o també poden estar totalment no relacionades): UNION inclourà la combinació de dades de les dues taules.
Vegem un exemple en què els conjunts A & B tenen alguns elements comuns. UNION contindrà tots els valors del conjunt A & B amb els valors duplicats omesos.
Ara, què passa si els conjunts A i B són disjunts i no contenen cap element comú? També aquí, la UNIÓ retornarà el mateix resultat.
Analitzem l’escenari en què hi ha elements superposats entre conjunts i volem que els valors duplicats també apareguin al conjunt de resultats.
MySQL proporciona una manera de fer-ho mitjançant l'opció UNION ALL tal com es mostra a la imatge següent.
Quin problema resol MySQL UNION
MySQL UNION s'utilitza quan teniu dades similars en 2 o més taules i voleu veure una vista combinada de les dades contingudes a les dues taules en lloc d'executar sentències SELECT per a taules individuals.
Per exemple - Suposem que hi ha 2 taules - Empleat i Estudiant. I esteu treballant en una base de dades de persones que només vol tenir un nom, edat i data de naixement per a tots els empleats i estudiants.
Sense UNION, haureu d'executar consultes SELECT separades per a les dues taules i després realitzar el càlcul desitjat amb el conjunt de resultats obtinguts.
Sintaxi MySQL UNION
Les consultes següents retornaran una UNION de 2 o més de 2 sentències SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Intentem veure diferents components de la sintaxi
- Podem veure que és possible combinar diverses consultes SELECT amb UNION per obtenir el conjunt de files resultant.
- Nom de les columnes i tipus de dades: és important entendre que les columnes que volem combinar han de tenir el mateix tipus de dades o compatibles. Per exemple: si teniu la columna 1 com a STRING, la columna 3 també hauria de ser STRING (o compatible amb STRING).
- Els noms i les posicions de les columnes es determinen a partir de la primera instrucció SELECT de la consulta UNION. Per exemple, a la sintaxi anterior: columna1 i columna2 s'anomenen columnes de capçalera al conjunt de resultats i els valors de columna3 i columna4 es mapen a columna1 i columna2, respectivament.
- Els resultats d'una consulta UNION per defecte elimina les entrades duplicades. Per exemple, en aquest cas, si hi ha una entrada duplicada que coincideix exactament i que té els mateixos valors per a la columna 1 i la columna 2, aquestes files s’ometran del conjunt de resultats.
Si es volen duplicats, podem utilitzar l'opció 'TOTS' juntament amb UNION.
L'ús de DISTINGUT està implicat per defecte. Tingueu en compte que també es podria especificar explícitament per tenir més llegibilitat.
Vegem un exemple de consulta UNION.
Suposem que hi ha 2 taules: empleat i estudiant, cadascuna amb informació personal.
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));
Ara, introduïu algunes dades fictícies en aquestes dues taules, tal com es mostra a continuació:
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');
Com podeu veure més amunt, hem afegit intencionadament una fila que té els mateixos atributs per al nom, l'edat i la data de naixement.
Vegem ara com podem combinar les dades d’aquestes dues taules amb ordres UNION. Consultarem el nom d’usuari i l’edat des de les dues taules.
UNIÓ simple
Consulta:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Veureu 9 registres al resultat (el que significa que la consulta anterior ha omès l'entrada duplicada).
Sortida:
nom | edat |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | 20 |
Akash | 22 |
Shirley | 19 |
Joana | 21 |
UNION Amb UNION ALL
L’ús de la clàusula UNION amb ALL garanteix que també es mostrin les entrades duplicades.
Consulta:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Sortida:
nom | edat |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | 20 |
Akash | 22 |
Shirley | 19 |
Joana | 21 |
Kartik | 20 |
UNIÓ Amb Condició
Afegim condicions a les declaracions SELECT on volem dades dels empleats de menys de 30 anys i dels estudiants de menys de 25 anys.
Consulta:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Sortida:
nom | edat |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | 20 |
Akash | 22 |
Shirley | 19 |
Joana | 21 |
Com podeu veure més amunt, el conjunt de resultats inclou el resultat combinat amb condicions SELECCIONADES individuals validades.
Ordenar resultats UNION
Els resultats d'una consulta UNION no estan ordenats per defecte.
Per tal d'imposar una ordenació per una columna existent al conjunt resultant, es pot especificar una clàusula ORDER BY al final de l'ordre UNION.
Utilitzem les mateixes dades sobre empleats / estudiants i ordenem els resultats de UNION en ordre ascendent per edats.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Sortida:
nom | edat |
---|---|
Shirley | 19 |
Kartik | 20 |
Joana | 21 |
Akash | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
El conjunt de resultats anterior s’ordena per valors d’edat en ordre creixent. També podem utilitzar àlies de columna per fer referència a les columnes de la clàusula ORDER BY.
Per exemple: - Una consulta com la següent també donarà el mateix resultat.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
Hi ha una altra manera d’utilitzar la clàusula ORDER BY només esmentant la posició de la columna en lloc del nom de la columna.
Per exemple: A la consulta UNION anterior, estem seleccionant el nom i l'edat que implica que aquestes columnes es trobin a les posicions 1 i 2, respectivament.
Per tant, per ORDENAR PER EDAT, simplement podem especificar la posició en lloc del nom de columna real.
Per tant, la consulta següent també donarà el mateix resultat.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION Vs UNION ALL
MySQL proporciona 2 variants d’UNION, és a dir, UNIÓ DISTINCTA i UNIÓ TOTS
Tingueu en compte que DISTINCT està implícit per defecte, encara que no s’indiqui.
La diferència principal entre tots dos és que UNION ALL permet combinar i retornar files duplicades, mentre que UNION només retorna les files combinades eliminant els duplicats.
La taula següent explica els detalls:
Paràmetre | UNIÓ | UNIÓ TOTS |
---|---|---|
Definició | És equivalent a UNION DISTINCT: ignora les files duplicades de dades mentre es retorna el resultat | Retorna totes les files, inclosos els duplicats |
Sintaxi | SELECCIONA {columnList} FROM {table1} UNIÓ SELECCIONA {columnList} FROM {table2} | SELECCIONA {columnList} FROM {table1} UNIÓ TOTS SELECCIONA {columnList} FROM {table2} |
Requisits de dades | Les dades combinades han de tenir tipus de dades similars i s'han de recuperar en el mateix ordre quan es recuperen de diverses taules | Igual que UNION |
Preguntes freqüents
P # 1) La unió és més ràpida que JOIN?
Resposta: UNION i JOIN s’utilitzen amb pràcticament 2 propòsits diferents.
Tècnicament parlant, UNION és molt més ràpid que JOIN (especialment per a conjunts de dades grans), ja que UNION només concatena files de dades de les sentències SELECT individuals.
Q # 2) Què és l'operador UNION ALL?
Resposta: De manera similar a UNION, l’operador UNION ALL també retorna la UNION entre 2 consultes SELECT, però la diferència és que també conté les files / entrades duplicades.
P # 3) Quina diferència hi ha entre UNION i JOIN?
Resposta: Tant UNION com JOIN s’utilitzen per combinar dades de 2 o més taules. Però hi ha una gran diferència pel que fa al conjunt de resultats obtinguts i a la forma d’obtenir les dades.
Les similituds i diferències entre JOIN i UNION es detallen a la taula següent:
UNIÓ | UNEIX-TE |
---|---|
Combina dades de diverses taules | Combina dades de diverses taules |
No requereix cap condició específica per recopilar o combinar dades | JOIN funciona amb una condició JOIN que és necessària per validar les dades que apareixen en el conjunt de resultats |
Les dades de taules diferents es prenen com a files diferents del conjunt de resultats | Les dades de diferents taules es combinen en una sola fila: per exemple, una fila del conjunt de resultats podria contenir 2 columnes de la taula1, 3 columnes de la taula 2, etc., segons la condició JOIN i la consulta SELECT. |
Les UNIONS són simples i directes | Les unions requereixen condicions complexes i, en funció de les necessitats, es podrien utilitzar diversos tipus d’unions com INNER / OUTER, etc. |
Conclusió
En aquest tutorial, hem après a utilitzar MySQL UNION per combinar dades de 2 o més sentències SELECT.
La declaració UNION és realment útil per recopilar dades similars de grans conjunts de taules diferents i després fer una anàlisi de les dades combinades.
L'ordre UNION també admet una clàusula ALL que també permet obtenir els registres duplicats.
Lectura recomanada
- Què és MySQL i per què s'utilitza?
- Diferència entre SQL vs MySQL vs SQL Server (amb exemples)
- Unió interior contra unió exterior: diferència exacta amb exemples
- Tutorial MySQL JOIN: Interior, exterior, creuat, esquerre, dret i autònom
- Tutorial MySQL Create View amb exemples de codi
- Tutorial MySQL Create Table amb exemples
- Tutorial de la declaració d'actualització de MySQL: actualització de sintaxi i exemples de consulta
- Top 40 de les millors preguntes i respostes d’entrevistes de MySQL (preguntes del 2021)