Query binarie -AD7

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:

query interrogazioni diverse

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

query Unioni compatibili ma differenti

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