|
EXISTS usa una sottoquery come condizione: la condizione è
Vera se la sottoquery ritorna almeno una riga, ed è Falsa se la sottoquery non
ritorna nessuna riga.
Questa è una funzionalità non intuitiva con quest’uso
specifico. Comunque, se si vuole stampare un riassuntivo clienti solo se il
negozio ha venduto Sedie, si può scrivere:
SELECT NomeAcquirente, CognomeAcquirente FROM ANTIQUARI WHERE
EXISTS
(SELECT
* FROM
ANTICHITA WHERE Oggetto =
'Sedia');
Se nella colonna della tabella ANTICHITA c’è almeno una riga
contenente l’articolo sedia, la sottoquery ritorna una o più righe, rendendo
Vera la condizione EXISTS; di conseguenza la query stampa gli Antiquari. Se non
ci sono righe con l’oggetto Sedia, la query esterna non stamperà alcuna riga.
ALL è un’altra funzionalità inusuale, in quanto la
query che contengono l’istruzione ALL possono essere eseguite in altri modi, a
volte anche più semplici; diamo un’occhiata alla query di esempio:
SELECT IDAcquirente, Oggetto FROM ANTICHITA WHERE Prezzo >=
ALL
(SELECT
Prezzo FROM ANTICHITA);
Questa query ritorna l’oggetto con il prezzo più alto (o più
di un oggetto se hanno un prezzo uguale e massimo), e l’Acquirente. La
sottoquery ritorna una lista di tutti i prezzi nella tabella ANTICHITA, mentre
la query esterna passa tutte le righe della tabella ANTICHITA, e se il prezzo è
maggiore o uguale di qualunque altro oggetto (ALL = tutti), viene stampato,
risultando così l’oggetto con il prezzo più alto. La ragione per cui viene usato
il segno di “maggiore o uguale” è che il prezzo dell’oggetto più costoso sarà
uguale al prezzo più alto della tabella.
di
|