Usare le UNION per unire i risultati di due tabelle
Articolo scritto da Max Bossi
Il linguaggio SQL ci offre un modo piuttosto semplice per unire, all'interno della medesima SELECT, i risultati di due diverse tabelle.
Per ottenere tale risultato è necesario fare ricorso all'opertore UNION il quale effettuerà, appunto, l'unione dei risultati ottenuti interrogando le due tabelle.
(L'articolo continua più sotto...)
');
Si noti che affinchè possa essere utilizzato correttamente l'operatore UNION è necesario che:
- che le tabelle siano interrogate sul medesimo numero di colonne;
- che le colonne richieste abbiano lo stesso nome;
- che le colonne richieste nelle due tabelle abbiano dei tipi di dato omogenei;
- hotel_italia
- nome
- stelle
- citta
- nazione
- hotel_europa
- nome
- stelle
- citta
- nazione
SELECT nome, stelle, citta, nazione FROM hotel_italia UNION SELECT nome, stelle, citta, nazione FROM hotel_europaGrazie a questa query otterremo un listato completo di tutti gli Hotel presenti nelle due tabelle:
| nome | stelle | citta | nazione |
| Hotel Cavour | 4 | Roma | IT |
| Hotel Miramare | 2 | Cattolica | IT |
| Hotel Manzoni | 2 | Milano | IT |
| Hotel Espana | 3 | Madrid | ES |
| Hotel Hilton | 5 | Londra | UK |
| Hotel am Schlossgarten | 4 | Stoccarda | DE |
Nota: è opportuno precisare che l'operatore UNION non mostra eventuali record duplicati (di default opera come se fosse una SELECT DISTINCT); qualora si desideri mostrare anche gli eventuali record duplicati (si pensi, per tornare al nostro esempio, ad un hotel presente sia nella tabella hotel_italia che in quella hotel_europa) sarà necessario utilizzare UNION ALL.
Ordinare e limitare i risultati derivanti dalla UNION
Si supponga che i risultati derivanti dall'utilizzo di UNION siano molteplici e di volerli limitare ad numero precisato. Come fare? Ecco una soluzione:
SELECT * FROM (SELECT nome, stelle, citta, nazione FROM hotel_italia UNION SELECT nome, stelle, citta, nazione FROM hotel_europa) AS hotel ORDER BY stelle DESC LIMIT 10In sostanza trattiamo i risultati derivanti dall'unione di due o più tabelle come se fossero la risultanza di un unica tabella, così facendo possiamo utilizzare i normali criteri di ordinamento e limite.







