il linguaggio sql. le interrogazioni in sql (continua…) la parte di sql dedicata alla formulazione...

76
Il Linguaggio SQL

Upload: annetta-marinelli

Post on 03-May-2015

225 views

Category:

Documents


11 download

TRANSCRIPT

Page 1: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Il Linguaggio SQL

Page 2: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 3: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Le interrogazioni in SQL (continua…)

• La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML.

• SQL esprime le interrogazioni in modo dichiarativo, cioè specifica l’obbiettivo dell’interrogazione e non il modo come ottenerlo.

• In tale caratteristica SQL si contrappone ai linguaggi ai linguaggi di interrogazione procedurali, come l’algebra relazionale.

• Le istruzioni di interrogazione in SQL vengono specificate per mezzo dell’istruzione SELECT.

Page 4: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Le interrogazioni SQL

• La struttura essenziale di SELECT è:

SELECT ListaAttributi

FROM ListaTabelle

[where condizione]• L’interrogazione SQL seleziona, tra le righe che

appartengono al prodotto cartesiano delle tabelle elencate nella clausola “FROM”, quelle che soddisfano le condizioni espresse nell’argomento della clausola “WHERE”, le cui colonne si ottengono valutando le espressioni “ATTRESPR” contenute nella clausola SELECT.

Page 5: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 6: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 7: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 8: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Come si può notare la clausola SELECT può avere come argomenti:

• L’ * che

rappresenta tutti gli

attributi.

• Espressioni.

Page 9: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 10: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 11: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 12: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 13: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 14: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 15: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 16: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Interpretazione formale delle interrogazioni SQL• E’ possibile costruire una corrispondenza tra le

interrogazioni SQL ed equivalenti interrogazioni in algebra relazionale.

• Data una interrogazione SQL semplice:

select T1.Attributo11, ….,Th.Attributohm

from Tabella1 T1, ….., Tabellan Tn

where Condizione• Diventa in algebra relazionale:

πT1.Attributo11,….,Th.Attributoh(σCondizione (Tabella1 x…x Tabellan)

• Naturalmente per interrogazioni SQL più complicate la formula sopra presentata non è direttamente applicabile.

Page 17: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 18: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 19: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 20: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 21: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 22: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Se si usa l’operatore ALL vengono mantenute tutte le tuple.

Page 23: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 24: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 25: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 26: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Una sintassi alternativa per la specifica del join (introdotta in SQL-2 e ancora in via di diffusione) permette di distinguere, tra le condizioni che compaiono nell’interrogazione, quelle che rappresentano condizioni di join e quelle che rappresentano condizioni di selezione sulle righe.

In questo modo è possibile specificare le forme esterne dell’operatore di join. Inoltre, la condizione del join non compare come argomento della clausola where ma viene spostata nella clausola from.

Il parametro TipoJoin specifica il tipo di join da usare: inner (che rappresenta il valore di default e quindi può essere omesso),right outer, left outer, full outer (il qualificatore outer è opzionale).

Page 27: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 28: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 29: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 30: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 31: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 32: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 33: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 34: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

L’ordinamento in base al primo attributo. Per righe che hanno lo stesso valore nel primo attributo si considerano i valori degli altri attributi in sequenza.

Se il qualificatore (asc o desc) è omesso si usa l’ordinamento ascendente.

Page 35: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 36: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 37: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 38: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 39: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 40: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 41: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 42: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 43: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 44: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 45: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 46: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Occorre notare che se le condizioni che i soottoinsiemi devono soddisfare sono verificabili al livello delle singole righe, allora basta usare dei predicati come argomento della clausola WHERE, altrimenti se le condizioni sono delle condizini di tipo aggregato occorre utilizzare un nuovo cotrutto: la clausola HAVING.

Page 47: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 48: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 49: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 50: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 51: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 52: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 53: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

SQL ammette l’utilizzo di predicati con un struttura più complessa di quanto visto finora.Una struttura in cui si confronta un valore (ottenuto come risultato di un’espressione valutato sulla singola riga) con il risultato di un’interrogazione SQL.

Page 54: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 55: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

La parola chiave ANY specifica che la riga soddisfa la condizione se risulta vero il confronto tra il valore dell’attributo per la riga e almeno uno degli elementi restituiti dalla sub-interrogazione.

Page 56: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 57: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 58: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 59: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Altri esempi …

• I dipartimenti in cui non lavorano persone di cognome “Rossi”:

select Nome

from Dipartimento

where Nome <> all (select Dipart

from Impegato

where Cognome =“Rossi”)

• Occorre sottolineare che il controllo di appartenenza o esclusione ad un insieme può essere effettuato in SQL con gli operatori IN e NOT IN, che risultano del tutto identici a = ANY e <> ALL.

Page 60: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 61: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Interrogazioni nidificate: commenti

• Un interpretazione semplice ed intuitiva delle interrogazioni nidificate consiste nell’assumere che l’interrogazione nidificata venga eseguita prima di analizzare le righe dell’interrogazione esterna.

• Se però, l’interrogazione nidificata fa riferimento al contesto dell’interrogazione che la racchiude l’interpretazione semplice non può essere più applicata. Ciò accade quando una variabile, definita nell’ambito della query più esterna, è utilizzata nell’ambito della query più interna.

• In quest’ultimo caso si parla di subquery correlate o anche di passaggio di binding.

Page 62: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Esempio di subquery correlate• Data la seguente relazione: PERSONA(CodFiscale, Nome,

Cognome, Città)

• Trovare le persone che hanno degli omonimi(cioè stesso nome e cognome ma diverso codice fiscale):

select *

from Persona P

where exists (select *

from Persona P1

where P1.Nome = P.Nome and

P1.Cognome = P.Cognome and

P1CodFiscale <> P.CodFiscale )

• In tal caso sarebbe impossibile eseguire l’interrogazione interna prima di valutare l’interrogazione più esterna.

Page 63: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Subquery correlate e scope

• La semantica delle subquery correlate dice che l’interrogazione interna viene eseguita una volta per ciascuna ennupla dell’interrogazione esterna.

• Per quanto riguarda la visibilità di una variabile SQL, vale la restrizione che una variabile è utilizzabile solo nella query in cui è definita o in una query nidificate (ad un qualsiasi livello) all’interno di essa.

• Se un’interrogazione possiede interrogazioni nidificate allo stesso livello (ma su predicati distinti), le variabili introdotte dalla clausola FROM di una query nidificata non potranno essere usate dall’altra di pari livello.

Page 64: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 65: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 66: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

Uso di EXISTS• Data la seguente relazione: PERSONA(CodFiscale, Nome,

Cognome, Città)

• Trovare le persone che non hanno degli omonimi:

select *

from Persona P

where not exists (select *

from Persona P1

where P1.Nome = P.Nome and

P1.Cognome = P.Cognome and

P1CodFiscale <> P.CodFiscale )

• Con gli opertori EXISTS e NOT EXISTS si verifica se la query annidata restituisce almeno una tupla (exists) o nessuna tupla (not exists)

Page 67: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 68: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 69: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 70: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 71: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 72: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 73: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 74: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 75: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le
Page 76: Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le

La natura set-oriented di SQL presenta alcune particolarità di cui occorre tener conto quando si effettuano gli aggiornamenti.Le operazioni sopra indicate si riferiscono alla volontà di modificare gli stipendi dei dipendenti: aumentando del 10% quelli sotto i 30 mila e del 15% quelli sopra.Ad esempio usando il suddetto approccio si avrebbe per alcuni (ad esempio quelli che sono vicino alla soglia dei 30) un aumento complessivo del 26.5%.