TOP

SQL-Lezione 12. Query combinate (UNION)

La maggior parte delle query SQL utilizza una singola istruzione che restituisce dati da una o più tabelle. SQL consente inoltre di eseguire più query separate contemporaneamente e visualizzare il risultato come un singolo set di dati. Tali query combinate vengono solitamente chiamate join o query composte.


1. Utilizzando l'operatore UNION

Le query SQL vengono combinate utilizzando l'operatore UNION. Per fare ciò, è necessario specificare ciascuna richiesta SELECT e inserire la parola chiave UNION tra di loro. Non esiste alcun limite al numero di utilizzi dell'operatore UNION in una query generale. Nella sezione precedente abbiamo notato che MS Access non ha la capacità di creare un'unione esterna completa, ora vedremo come ciò può essere ottenuto tramite l'operatore UNION.

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

Vediamo che la query mostra sia tutte le colonne della prima tabella che della seconda, indipendentemente dal fatto che tutti i record abbiano controparti in un'altra tabella.

Vale anche la pena notare che in molti casi, invece di UNION, possiamo utilizzare la clausola WHERE con molte condizioni e ottenere un risultato simile. Tuttavia, grazie a UNION, i record appaiono più concisi e chiari.

È inoltre necessario seguire alcune regole quando si scrivono query combinate:

  • la richiesta UNION deve includere due o più operatori SELECT separati dalla parola chiave UNION (ovvero, se nella richiesta vengono utilizzati quattro operatori SELECT, allora devono esserci tre parole chiave UNION);
  • ogni query nell'operatore UNION deve avere le stesse colonne, espressioni o funzioni statistiche, che peraltro devono essere elencate nello stesso ordine;
  • i tipi di dati delle colonne devono essere compatibili. Non devono necessariamente essere dello stesso tipo, ma devono avere un tipo simile in modo che il DBMS possa convertirli in modo univoco (ad esempio, possono essere tipi di dati numerici diversi o tipi di data diversi).
  • 2. Includere o escludere righe ripetute

    Una query con UNION rimuove automaticamente tutte le righe duplicate dal set di risultati della query (in altre parole, si comporta come una clausola WHERE con più condizioni in una singola istruzione SELECT). Questo è il comportamento predefinito dell'operatore UNION, ma possiamo cambiarlo se vogliamo. Per questo dovremmo usare l'operatore UNION ALL invece di UNION.

    3. Ordinamento dei risultati delle query combinate

    I risultati dell'istruzione SELECT vengono ordinati utilizzando l'istruzione ORDER BY. Quando si combinano le query utilizzando UNION, è possibile utilizzare solo una clausola ORDER BY e deve essere inserita nell'ultima istruzione SELECT. In effetti, in pratica, non ha molto senso ordinare parte dei risultati in un ordine e l'altra parte in un altro. Pertanto non sono consentite più frasi ORDER BY.