venerdì, settembre 19, 2008

Basi di dati: SQL: Query annidate (e implementazione della divisione)

ANY

Usata per mettere in clausola WHERE il risultato di un'altra query o di un elenco.

Es.= SELECT
Campo1
FROM
Tabella1
WHERE
Tabella1.CampoX = ANY (SELECT ……..)

Es.= SELECT
Campo1
FROM
Tabella1
WHERE
Tabella1.CampoX = ANY (valore1, valore2)

IN

Stesso significato diversa sintassi

Es.= SELECT
Campo1
FROM
Tabella1
WHERE
Tabella1.Campo2
IN (SELECT ……..)


SUBQUERY CORRELATE

Mediante alias di tabelle/query posso passare parametri all'interno/esterno delle subquery

EXISTS

True se la subquery ritorna almeno 1 valore

NOT EXISTS

Opposto di EXISTS


Implementazione della DIVISIONE

Regola del controesempio: doppia negazione con NOT EXISTS


Es:

Gli impiegati che partecipano a tutti i progetti con budget > 50k

=

Tutti gli impiegati esclusi (quelli a cui manca almeno un progetto > 50k)

=

Tutti gli impiegati esclusi (gli impiegati a cui manca la partecipazione (ad un progetto da 50k))


Soluzione prof:

SELECT ID FROM Impiegato I WHERE NOT EXISTS

(

SELECT * FROM Progetto Y WHERE Budget > 50000 AND NOT EXISTS

(

SELECT * FROM Partecipazione P WHERE I.ID = P.ID AND Y.Prog# = P.Prog#

)

)

Nessun commento: