Che materia stai cercando?

Gestione dati e archivi - SQL Appunti scolastici Premium

Slide relative all'esame di gestione dati e archivi del professor Claudio Gentile, cdl in scienze della comunicazione. Tra gli argomenti trattati l'SQL, i domini e la loro definizione, le tabelle, i vincoli e tutti i comandi e le stringhe relative alla crazione di un database.

Esame di Gestione dati e archivi docente Prof. C. Gentile

Anteprima

ESTRATTO DOCUMENTO

SQL Join naturale

“Padre e madre di ogni persona”

select paternita.figlio, padre, madre

from maternita, paternita

where paternita.figlio = maternita.figlio 35

SQL Join di una relazione con se stessa

“Le persone che guadagnano più dei rispettivi padri;

mostrare nome, reddito e reddito del padre”

select f.nome, f.reddito, p.reddito

from persone p, paternita, persone f

where p.nome = padre and

figlio = f.nome and

f.reddito > p.reddito 36

SQL Ridenominazione del risultato

“Le persone che guadagnano più dei rispettivi padri;

mostrare nome, reddito e reddito del padre”

select figlio,

f.reddito as reddito,

p.reddito as redditoPadre

from persone p, paternita, persone f

where p.nome = padre and

figlio = f.nome and

f.reddito > p.reddito 37

SQL SELECT, con join esplicito, sintassi

AttrExpr [ [as] Alias ] {,AttrExpr [ [as] Alias ] }

select

Tabella [ [ ] Alias ]

from as

{[ TipoJoin ] Tabella [ [ ] Alias ] CondDiJoin }, ...

join as on

[ AltraCondizione ]

where 38

SQL Join esplicito

“Padre e madre di ogni persona”

select madre, paternita.figlio, padre

from maternita join paternita on

paternita.figlio = maternita.figlio 39

SQL Ulteriore estensione: join naturale

“Padre e madre di ogni persona”

select madre, paternita.figlio, padre

from maternita natural join paternita

select madre, paternita.figlio, padre

from maternita join paternita on

paternita.figlio = maternita.figlio 40

SQL Join 41

SQL Join esplicito

select I.Nome, Cognome, Citta

from Impiegato I join Dipartimento D

on Dipart = D.Nome 42

SQL Ordinamento del risultato

AttrDiOrdinamento [ | ]

order by asc desc

{, AttrDiOrdinamento [ | ] }

asc desc

select Cognome, Nome, Stipendio

from Impiegato

where Dipart like 'Amm%'

order by Stipendio desc, Cognome 43

SQL Necessità di operatori su tuple

• tutte le condizioni dell’algebra vengono valutate su una tupla

alla volta

• la condizione è sempre un predicato che viene valutato su

ciascuna tupla indipedentemente da tutte le altre

• se volessi contare il numero di impiegati di un certo dipartimento

a partire da una relazione come si fa?

Impiegato

• occorre introdurre degli operatori che consentono di valutare

proprietà che dipendono da insiemi di tuple

• questi operatori sono detti operatori aggregati 44

SQL Operatori aggregati

select count(*) AS NumeroImpiegati

from Impiegato

where Dipart = 'Produzione'

• l’operatore aggregato (count) viene applicato al risultato

dell’interrogazione:

select *

from Impiegato

where Dipart = 'Produzione' 45

SQL COUNT: sintassi

< | [ | ] ListaAttributi > )

count ( * distinct all

select count(Stipendio) as NumeroStipendi

from Impiegato

select count(distinct Stipendio)

as StipendiDiversi

from Impiegato 46

SQL COUNT e valori nulli

select count(*) as NumeroImpiegati

from Impiegato

select count(Stipendio) as NumeroStipendi

from Impiegato 47

SQL Somma, media, massimo, minimo

< | | | > [ | ] AttrEspr

sum max min avg ( distinct all )

Totale degli stipendi del dipartimento amministrazione

select sum(Stipendio) as TotaleStipendi

from Impiegato

where Dipart = 'Amministrazione'

• escludono opportunamente i valori nulli 48

SQL Join e operatore aggregato

“Il massimo stipendio tra quelli degli impiegati che lavorano in un

dipartimento con sede a Milano”

select max(Stipendio)

from Impiegato, Dipartimento D

where Dipart = D.Nome and

Citta = 'Milano'

• Nota: non abbiamo usato la e l’attributo nel risultato non ha

as

nome 49

SQL Operatori aggregati e target list

• un’interrogazione scorretta:

select Cognome, Nome, max(Stipendio)

from Impiegato, Dipartimento

where Dipart = NomeDip and

Citta = 'Milano’

• di chi sarebbe il cognome? La target list deve essere omogenea

50

SQL Interrogazioni con raggruppamento

• gli operatori aggregati vengono applicati ad un insieme di righe

• gli esempi visti operano su tutte le righe

• spesso esiste l’esigenza di applicare operatori aggregati a

distintamente ad insiemi di tuple

• in SQL l’operatore group by ci consente di fare questo 51

SQL Operatori aggregati e raggruppamenti

“Per ogni dipartimento, la somma degli stipendi”

select Dipart, sum(Stipendio) as SommaStipendi

from Impiegato

group by Dipart 52

SQL Semantica di interrogazioni

con operatori aggregati e raggruppamenti

• interrogazione senza e senza operatori aggregati:

group by

select Dipart, Stipendio

from Impiegato 53

SQL Semantica …, 2

• poi si raggruppa e si applica l’operatore aggregato a ciascun

gruppo

dopo dopo

group by sum()as 54

SQL Raggruppamento sbagliato

select ufficio

from impiegato

group by dipart

Ad ogni valore ( e quindi gruppo) di possono corrispondere

dipart

più valori di Quale scegliere?

ufficio. 55

SQL importante!

• nella clausola può comparire solo un sottoinsieme S degli

select

attributi utilizzati nella clausola group by

• in questo modo, ciascuna tupla sugli attributi in S è associata ad un

unico valore del gruppo

• E’ una condizione molto restrittiva.

interrogazione scorretta:

select dipart, count (*), d.città

from impiegato i join dipartimento d on i.dipart=d.nome

group by dipart

corretta:

select dipart, count (*), d.città

from impiegato i join dipartimento d on i.dipart=d.nome

group by dipart, città 56

SQL Condizioni sui gruppi

“I dipartimenti che spendono più di 100 milioni in stipendi”

select Dipart,

sum(Stipendio) as SommaStipendi

from Impiegati

group by Dipart

having sum(Stipendio) > 100 57

SQL WHERE o HAVING?

“I dipartimenti per cui la media degli stipendi degli impiegati che

lavorano nell'ufficio 20 è superiore a 25 milioni”

select Dipart

from Impiegato

where Ufficio = 20

group by Dipart

having avg(Stipendio) > 25 58

SQL Sintassi, riassumiamo

SelectSQL ::= ListaAttributiOEspressioni

select

ListaTabelle

from

[ CondizioniSemplici ]

where

[ ListaAttributiDiRaggruppamento ]

group by

[ CondizioniAggregate ]

having

[ ListaAttributiDiOrdinamento ]

order by 59

SQL Unione, intersezione e differenza

• la sintassi da sola non permette di fare

select-from-where

unioni; serve un costrutto esplicito:

SelectSQL { < | | > [ ] SelectSQL }

union intersect except all

select Nome

from Impiegato

union

select Cognome as Nome

from Impiegato

• i duplicati vengono eliminati (a meno che si usi (anche

all)

dalle proiezioni) 60

SQL Interrogazioni nidificate

• le condizioni atomiche esprimibili nella clausola WHERE

permettono anche

– il confronto fra un attributo (o più, vedremo poi) e il risultato

di una sottointerrogazione

– quantificazioni esistenziali 61

SQL Interrogazioni nidificate, sintassi

ConfrontoConNidificazione :: =

Scalare OpConfronto [ | ]

any all

SelectAttributoSingolo)|

( SelectStar

exists ( )

• senza o , il risultato della SelectAttributoSingolo deve

any all

essere un solo valore

Select... (risp. è vero se è in relazione

• v.A any all) v.A

θ θ

con almeno uno (risp. con tutti) dei valori del risultato della

Select puo essere abbreviato con

• = any in

SelectStar è vero se il risultato della

• exists( )

sottoespressione non è vuoto. 62

SQL Interrogazioni nidificate

“Gli impiegati che lavorano in dipartimenti di Roma”

select *

from Impiegato

where Dipart = any (select Nome

from Dipartimento

where Citta = 'Roma') 63

SQL “Nome e reddito del padre di Mario”

select Nome, Reddito

from Persone

where Nome = (select Padre

from Paternita

where Figlio = 'Mario')

select Nome, Reddito

from Persone, Paternita

where Nome = Padre and

Figlio = 'Mario' 64

SQL Interrogazioni nidificate, commenti

• La prima versione di SQL prevedeva solo la forma nidificata (o

strutturata), con una sola relazione in ogni clausola FROM. Il

che è insoddisfacente:

– la dichiaratività è limitata

– non si possono includere nella target list attributi di relazioni

nei blocchi interni

• La forma nidificata è “meno dichiarativa”, ma talvolta più

leggibile (richiede meno variabili)

• La forma piana e quella nidificata possono essere combinate

• Le sottointerrogazioni non possono contenere operatori

insiemistici (“l’unione si fa solo al livello esterno”); la limitazione

non è significativa 65


PAGINE

69

PESO

1.23 MB

AUTORE

Menzo

PUBBLICATO

+1 anno fa


DETTAGLI
Corso di laurea: Corso di laurea in scienze della comunicazione
SSD:
A.A.: 2013-2014

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Menzo di informazioni apprese con la frequenza delle lezioni di Gestione dati e archivi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Insubria Como Varese - Uninsubria o del prof Gentile Claudio.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Gestione dati e archivi

Gestione dati e archivi - progettazione di basi di dati / metodologie e modelli
Appunto
Esame luglio 2006
Esercitazione
Esame giugno 2006
Esercitazione
Esame settembre 2006
Esercitazione