mysql union comprehensive tutorial with union examples
Questo tutorial spiega il comando MySQL UNION, i suoi tipi, Union vs Union All ed esempi per combinare i dati di 2 o più query:
MySQL UNION viene utilizzato per combinare i risultati di più query SELECT in un unico set di risultati. È anche possibile avere tutte le query / operazioni complesse nelle query SELECT ed eseguire UNION con altre istruzioni SELECT per produrre un risultato combinato.
cos'è un file .eps
La caratteristica predefinita di un'istruzione UNION sarebbe quella di rimuovere le voci o le righe duplicate dal set di righe risultante, tuttavia, fornisce anche modi per recuperare i record duplicati utilizzando la clausola UNION ALL.
Cosa imparerai:
- Comprensione dell'UNIONE attraverso la teoria degli insiemi
- Quale problema risolve MySQL UNION
- MySQL UNION Vs UNION ALL
- Conclusione
Comprensione dell'UNIONE attraverso la teoria degli insiemi
L'operazione UNION potrebbe essere compresa molto bene dai principi della teoria SET.
Supponiamo di avere tabelle A e B come rappresentate dagli insiemi di seguito e che hanno alcuni dati sovrapposti (o può anche essere totalmente non correlato) - UNION includerà la combinazione di dati da entrambe le tabelle.
Vediamo un esempio in cui gli insiemi A e B hanno alcuni elementi comuni. L'UNIONE conterrà tutti i valori del set A e B con i valori duplicati omessi.
Ora, cosa succede se gli insiemi A e B sono disgiunti e non contengono elementi comuni? Anche qui l'UNIONE restituirà lo stesso risultato.
Parliamo dello scenario in cui ci sono elementi sovrapposti tra gli insiemi e vogliamo che i valori duplicati appaiano anche nell'insieme dei risultati.
MySQL fornisce un modo per farlo utilizzando l'opzione UNION ALL come mostrato nell'immagine sottostante.
Quale problema risolve MySQL UNION
MySQL UNION viene utilizzato quando si hanno dati simili su 2 o più tabelle e si desidera vedere una vista combinata dei dati contenuti in entrambe le tabelle piuttosto che eseguire istruzioni SELECT per singole tabelle.
Per esempio - Supponiamo che ci siano 2 tabelle - Dipendente e Alunno. E stai lavorando su un database di persone che vuole solo avere un nome, un'età e una data di nascita per tutti i dipendenti e gli studenti.
Senza UNION, sarà necessario eseguire query SELECT separate per entrambe le tabelle e quindi eseguire il calcolo desiderato con il set di risultati ottenuto.
Sintassi di MySQL UNION
Le query seguenti restituiranno un'UNIONE di 2 o più di 2 istruzioni SELECT.
SELECT {column1}, {column2} FROM {table1} UNION (ALL | DISTINCT) SELECT {column3}, {column4} FROM {table2} UNION (ALL | DISTINCT) SELECT ...
Proviamo a vedere diversi componenti della sintassi
- Possiamo vedere che è possibile combinare più query SELECT con UNION per ottenere il set di righe risultante.
- Nome colonna e tipi di dati: è importante capire che le colonne che desideriamo combinare devono avere lo stesso tipo di dati o compatibile. Per esempio: se la colonna1 è STRINGA, anche la colonna3 dovrebbe essere STRING (o compatibile con STRING).
- I nomi e le posizioni delle colonne vengono determinati dalla prima istruzione SELECT nella query UNION. Ad esempio, nella sintassi precedente: colonna1 e colonna2 vengono denominate come colonne di intestazione nel set di risultati ei valori di colonna3 e colonna4 vengono mappati rispettivamente a colonna1 e colonna2.
- I risultati di una query UNION rimuovono per impostazione predefinita le voci duplicate. Per esempio, in questo caso, se è presente una voce duplicata che ha una corrispondenza esatta e ha gli stessi valori per colonna1 e colonna2, tali righe verranno omesse dal set di risultati.
Se si desiderano duplicati, è possibile utilizzare l'opzione 'ALL' insieme a UNION.
L'uso di DISTINTO è implicito per impostazione predefinita. Si noti che potrebbe anche essere specificato esplicitamente per avere una maggiore leggibilità.
Vediamo un esempio di una query UNION.
Supponiamo che ci siano 2 tabelle - dipendente e studente - ciascuna con informazioni personali.
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));
Ora, inserisci alcuni dati fittizi in entrambe queste tabelle come mostrato di seguito:
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');
Come puoi vedere sopra, abbiamo aggiunto intenzionalmente una riga che ha gli stessi attributi per nome, età e data di nascita.
Vediamo ora come possiamo combinare i dati in queste 2 tabelle utilizzando i comandi UNION. Interrogeremo il nome utente e l'età da entrambe le tabelle.
UNIONE semplice
Query:
SELECT name, age FROM employee UNION SELECT name, age FROM student;
Vedrai 9 record nel risultato (il che significa che la query sopra ha omesso la voce duplicata).
Produzione:
nome | età |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | venti |
Akash | 22 |
Shirley | 19 |
Joana | ventuno |
UNION Con UNION ALL
L'utilizzo della clausola UNION con ALL garantirà la visualizzazione anche delle voci duplicate.
Query:
SELECT name, age FROM employee UNION ALL SELECT name, age FROM student;
Produzione:
nome | età |
---|---|
Ian | 26 |
Darren | 32 |
Abhishek | 28 |
Amit | 30 |
Steven | 40 |
Kartik | venti |
Akash | 22 |
Shirley | 19 |
Joana | ventuno |
Kartik | venti |
UNIONE con condizione
Aggiungiamo condizioni alle istruzioni SELECT in cui vogliamo i dati dei dipendenti di età inferiore a 30 anni e degli studenti di età inferiore a 25 anni.
Query:
SELECT name, age FROM employee where age <30 UNION SELECT name, age FROM student where age < 25;
Produzione:
nome | età |
---|---|
Amit | 30 |
Abhishek | 28 |
Kartik | venti |
Akash | 22 |
Shirley | 19 |
Joana | ventuno |
Come puoi vedere sopra, il set di risultati include il risultato combinato con singole condizioni SELECT convalidate.
Ordinazione dei risultati UNION
I risultati di una query UNION non sono ordinati per impostazione predefinita.
Per imporre un ordinamento in base a una colonna esistente nel set risultante, è possibile specificare una clausola ORDER BY alla fine del comando UNION.
Utilizziamo gli stessi dati di dipendenti / studenti e ordiniamo i risultati di UNION in ordine crescente per età.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY age asc
Produzione:
nome | età |
---|---|
Shirley | 19 |
Kartik | venti |
Joana | ventuno |
Akash | 22 |
Ian | 26 |
Abhishek | 28 |
Darren | 32 |
Steven | 40 |
Il set di risultati di cui sopra è ordinato per valori di età in ordine crescente. Possiamo anche utilizzare alias di colonna per fare riferimento alle colonne nella clausola ORDER BY.
Per esempio: - Anche una query come la seguente produrrà lo stesso risultato.
SELECT name as customer_name, age as customer_age FROM employee UNION SELECT name, age FROM student ORDER BY customer_age asc
C'è un altro modo per utilizzare la clausola ORDER BY menzionando semplicemente la posizione della colonna invece del nome della colonna.
Per esempio: Nella query UNION sopra, stiamo selezionando nome ed età, il che implica che queste colonne si trovano rispettivamente nelle posizioni 1 e 2.
Quindi, per ORDER BY età, possiamo semplicemente specificare la posizione invece del nome effettivo della colonna.
Pertanto, anche la query seguente produrrà lo stesso risultato.
SELECT name, age FROM employee UNION SELECT name, age FROM student ORDER BY 2 asc
MySQL UNION Vs UNION ALL
MySQL fornisce 2 varianti di UNION i.e. UNION DISTINCT e UNION ALL
Si noti che il DISTINCT è implicito per impostazione predefinita, anche se non dichiarato.
La principale differenza tra entrambi è che UNION ALL consente di combinare e restituire anche righe duplicate, mentre UNION restituisce semplicemente le righe combinate rimuovendo i duplicati.
La tabella seguente spiega i dettagli:
Parametro | UNIONE | UNION ALL |
---|---|---|
Definizione | È equivalente a UNION DISTINCT: ignora le righe di dati duplicate durante la restituzione del risultato | Restituisce tutte le righe inclusi i duplicati |
Sintassi | SELEZIONA {columnList} DA {tabella1} UNIONE SELEZIONA {columnList} DA {table2} | SELEZIONA {columnList} DA {tabella1} UNION ALL SELEZIONA {columnList} DA {table2} |
Requisiti dei dati | I dati combinati dovrebbero avere tipi di dati simili e dovrebbero essere recuperati nello stesso ordine quando vengono recuperati da più tabelle | Uguale a UNION |
Domande frequenti
D # 1) Union è più veloce di JOIN?
Risposta: UNION e JOIN vengono utilizzati praticamente per 2 scopi diversi.
Tecnicamente parlando, UNION è molto più veloce di JOIN (specialmente per set di dati di grandi dimensioni) poiché UNION concatena semplicemente le righe di dati dalle singole istruzioni SELECT.
D # 2) Cos'è l'operatore UNION ALL?
Risposta: Simile a UNION, l'operatore UNION ALL restituisce anche l'UNION tra 2 query SELECT, ma la differenza è che contiene anche le righe / voci duplicate.
D # 3) Qual è la differenza tra UNION e JOIN?
Risposta: Sia UNION che JOIN vengono utilizzati per combinare i dati di 2 o più tabelle. Ma c'è un'enorme differenza in termini di set di risultati ottenuto e modo in cui i dati vengono recuperati.
Le somiglianze e le differenze tra JOIN e UNION sono elencate nella tabella seguente:
UNIONE | ADERIRE |
---|---|
Combina i dati di più tabelle | Combina i dati di più tabelle |
Non richiede alcuna condizione specifica per raccogliere o combinare i dati | JOIN funziona su una condizione JOIN che è necessaria per convalidare i dati in arrivo nel set di risultati |
I dati di tabelle diverse vengono considerati come righe diverse del set di risultati | I dati di tabelle diverse vengono combinati in una singola riga, ad esempio una riga nel set di risultati potrebbe contenere 2 colonne dalla tabella 1, 3 colonne dalla tabella 2 ecc. |
Le UNION sono semplici e dirette | I JOINS richiedono condizioni complesse e, a seconda delle esigenze, possono essere utilizzati più tipi di join come INNER / OUTER ecc. |
Conclusione
In questo tutorial, abbiamo imparato a usare MySQL UNION per combinare i dati da 2 o più istruzioni SELECT.
L'istruzione UNION è davvero utile per raccogliere dati simili da grandi insiemi di tabelle diverse e quindi eseguire un'analisi sui dati combinati.
Il comando UNION supporta anche una clausola ALL che abilita anche il recupero dei record duplicati.
Lettura consigliata
- Che cos'è MySQL e perché viene utilizzato?
- Differenza tra SQL Vs MySQL Vs SQL Server (con esempi)
- Join interno vs join esterno: differenza esatta con esempi
- MySQL JOIN Tutorial: Inner, Outer, Cross, Left, Right e Self
- Tutorial MySQL Create View con esempi di codice
- Tutorial sulla creazione di tabelle in MySQL con esempi
- Tutorial sull'istruzione di aggiornamento di MySQL: sintassi ed esempi delle query di aggiornamento
- Le 40 migliori domande e risposte per i colloqui di MySQL (domande 2021)