Query binarie (set queries)
Permettono di trovare un dato basandosi sulle sue proprietàe allo stesso tempo permettono di trovare dati basandosi su confronti tra i contenuti di più tabelle.
• Costruite concatenando due query SQL tramite operatori insiemistici
• Sintassi:
SelectSQL { < union | intersect | except > [ all ] SelectSQL }
– union unione
– intersect intersezione
– except (minus) differenza
• Si eliminano i duplicati, a meno che non venga usata l’opzione all
Unione
• Estrarre i codici degli ordini i cui importi superano 500 euro oppure in cui qualche prodotto è presente con quantità superiore a 1000
select CodOrd
from Ordine
where Importo > 500
union
select CodOrd
from Dettaglio
where Qta > 1000
Unione con all
• Estrarre i codici degli ordini i cui importi superano 500 euro oppure in cui qualche prodotto è presente con quantità superiore a 1000, ripetendo il codice tante volte quante e` presente in ordini e dettagli.
select CodOrd
from Ordine
where Importo > 500
union all
select CodOrd
from Dettaglio
where Qta > 1000
Unioni compatibili ma differenti
select Padre, Figlio from Paternita union select Figlio, Madre from Maternita |
select Padre, Figlio from Paternita union select Madre, Figlio from Maternita |
• Sono interrogazioni diverse; esempio:
Unioni compatibili ma differenti (cont.)
select Padre, Figlio from Paternita union select Figlio, Madre from Maternita |
select Padre, Figlio from Paternita union select Madre, Figlio from Maternita |
Altro esempio di uso di all
• Estrarre i padri di persone con nome “Giorgio” o “Giovanni”, presentando due volte i padri che hanno due figli con ciascuno dei nomi
select Padre
from Paternita
where Figlio = ’Giorgio’
union all
select Padre
from Paternita
where Figlio = ’Giovanni’
Differenza
• Estrarre i codici degli ordini i cui importi superano 500 euro ma in cui nessun prodotto è presente con quantità superiore a 1000
select CodOrd
from Ordine
where Importo > 500
except
select CodOrd
from Dettaglio
where Qta > 1000
Differenza con all
• Estrarre i codici degli ordini che presentano n >=1 linee d’ordine con quantità maggiore di 10 e non presentano un numero m >= n di linee d’ordine con quantità superiore a 1000
select CodOrd
from Dettaglio
where Qta > 10
except all
select CodOrd
from Dettaglio
where Qta > 1000
Intersezione
• Estrarre i codici degli ordini i cui importi superano 500 euro e in cui qualche prodotto è presente con quantità superiore a 1000
select CodOrd
from Ordine
where Importo > 500
intersect
select CodOrd
from Dettaglio
where Qta > 1000