Anteprima
Vedrai una selezione di 15 pagine su 69
Gestione dati e archivi - SQL Pag. 1 Gestione dati e archivi - SQL Pag. 2
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 6
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 11
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 16
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 21
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 26
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 31
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 36
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 41
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 46
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 51
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 56
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 61
Anteprima di 15 pagg. su 69.
Scarica il documento per vederlo tutto.
Gestione dati e archivi - SQL Pag. 66
1 su 69
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Vincoli interrelazionali in SQL

Cognome character(20) not null, unique (Cognome, Nome) • è diverso da: Nome character(20) not null unique, Cognome character(20) not null unique

SQL Vincoli interrelazionali (chiave esterna) permettono di • references foreign key definire vincoli di integrità referenziale; sintassi: – per singoli attributi: dopo il dominio references – riferimenti su più attributi: Attributo { Attributo } foreign key( , ) references ...

• è possibile associare politiche di reazione alla violazione dei vincoli (causate da modifiche sulla tabella esterna, cioè quella cui si fa riferimento)

SQL Richiamo: base di dati con vincoli di integrità referenziale

SQL Vincoli interrelazionali, esempiocreate table Infrazioni(Codice character(6) primary key, Data date not null, Vigile integer not null references Vigile(Matricola), Provincia character(2), Numero character(6), foreign key(Provincia, Numero) references Automobili(Provincia, Numero)) e’ una

Infrazioni Vigile Auto SQL Violazione dei vincoli
14
  • Per tutti i vincoli visti fino ad ora si assume che se violati a causa di un aggiornamento, il comando di aggiornamento venga rifiutato segnalando l'errore all'utente.
  • Per i vincoli di integrità referenziale, SQL permette di scegliere altre reazioni da adottare quando viene rilevata una violazione.
  • La reazione è possibile solo per le operazioni sulla tabella esterna che si propagano secondo una certa politica verso la tabella interna.
  • Le violazioni possibili sono causate da modifiche del valore dell'attributo riferito e dalla cancellazione di righe (es. modifiche dell'attributo e cancellazione di righe da Provincia Vigile).
15
  • Specificata immediatamente dopo il vincolo di integrità consente di associare politiche diverse ai diversi eventi (delete, update) secondo la seguente sintassi: < > on delete |
  • update< cascade | set null | set default |>no action 16SQL Reazioni per deletesi propagano le cancellazioni
    • cascade: all'attributo referente viene assegnato il valore nullo
    • set null: al posto del valore cancellato nella tabella all'attributo referente viene assegnato il valore
    • set default: di default al posto del valore cancellato nella tabella esterna la cancellazione non viene consentita
    • no action:
  • 17SQL Reazioni per update
    • il nuovo valore valore viene propagato nell'altra
    • cascade: tabella all'attributo referente viene assegnato il valore nullo
    • set null: al posto del valore modificato nella tabella all'attributo referente viene assegnato il valore
    • set default: di default al posto del valore modificato nella tabella esterna l'azione di modifica non viene consentita
    • no action:
  • 18SQL Modifiche degli schemi
    • Fornisce primitive per la manipolazione di schemi che permettono di modificare gli schemi:
    • alter
alter table drop domain drop table ... 19 Tutti i DBMS relazionali gestiscono le descrizioni delle tabelle presenti nella basi di dati mediante una struttura relazionale, cioè mediante tabelle.
La base di dati contiene due tipi di tabelle:
- quelle contente i dati, e
- quelle contenente i metadati (dati che descrivono dati), detti il catalogo della base di dati oppure il dizionario dei dati
I comandi di definizione e modifica dello schema manipolano il dizionario dei dati 20
[ [as] Alias ] { AttrExpr [ [as] Alias ] }

[ Condizione ]
le tre parti vengono di solito chiamate
- target list
- clausola from
- clausola where
seleziona tra le righe che appartengono al prodotto cartesiano delle tabelle elencate nella clausola quelle che soddisfano la condizione espressa

nell'argomento della clausola where SQL Selezione e proiezione "Nome e reddito delle persone con meno di trenta anni"
select nome, reddito
from persona
where eta < 30

SQL SELECT, abbreviazioni
• data una relazione R su A e B
select *
from R
• equivale (intutivamente) a
select X.A AS A, X.B AS B
from R X
where true

SQL Selezione, senza proiezione
select *
from Impiegato
where Cognome = 'Rossi'

SQL Espressioni nella target list
select Stipendio/12 as StipendioMensile
from Impiegato
where Cognome = 'Bianchi'

SQL Disgiunzione
select Nome, Cognome
from Impiegato
where Dipart = 'Amministrazione' or Dipart = 'Produzione'

SQL Condizione complessa
select Nome
from Impiegato
where Cognome = 'Rossi' and (Dipart = 'Amministrazione' or Dipart = 'Produzione')

SQL Condizione "LIKE"
"Gli impiegati che hanno un cognome che ha una 'o' in seconda posizione e finisce per"

Numero Argomento Query
30 SQL Gestione dei valori nulli SELECT * FROM Impiegato WHERE Cognome LIKE '_o%i' OR Stipendio < 50 OR Stipendio IS NULL
31 SQL Selezione, proiezione e join SELECT * FROM Impiegato WHERE Stipendio > 20
32 SQL Proiezione, senza selezione SELECT Nome, Cognome FROM Impiegato
33 SQL Proiezione: duplicati SELECT Cognome FROM Impiegato
34 SQL Join naturale SELECT paternita.figlio, padre, madre FROM maternita, paternita WHERE paternita.figlio = maternita.figlio
35 SQL Join di una relazione con se stessa SELECT f.nome, f.reddito, p.reddito FROM persone p, paternita f WHERE p.nome = f.figlio AND p.reddito > f.reddito

persone fwhere p.nome = padre andfiglio = f.nome andf.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 redditoPadrefrom persone p, paternita, persone fwhere p.nome = padre andfiglio = f.nome andf.reddito > p.reddito 37

SQL SELECT, con join esplicito, sintassiAttrExpr [ [as] Alias ] {,AttrExpr [ [as] Alias ] }selectTabella [ [ ] 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, padrefrom maternita join paternita onpaternita.figlio = maternita.figlio 39

SQL Ulteriore estensione: join naturale“Padre e madre di ogni persona”select madre, paternita.figlio, padrefrom maternita natural join paternitaselect madre, paternita.figlio, padrefrom maternita join paternita

= 'Amm'group by Dipartimento45SQL Operatori aggregati (continua)select Dipartimento, count(*) AS NumeroImpiegatifrom Impiegatogroup by Dipartimento46SQL Operatori aggregati (continua)select Dipartimento, avg(Stipendio) AS StipendioMediofrom Impiegatogroup by Dipartimento47SQL Operatori aggregati (continua)select Dipartimento, max(Stipendio) AS StipendioMassimofrom Impiegatogroup by Dipartimento48SQL Operatori aggregati (continua)select Dipartimento, min(Stipendio) AS StipendioMinimofrom Impiegatogroup by Dipartimento49SQL Operatori aggregati (continua)select Dipartimento, sum(Stipendio) AS StipendioTotalefrom Impiegatogroup by Dipartimento50SQL Operatori aggregati (continua)select Dipartimento, count(*) AS NumeroImpiegati, avg(Stipendio) AS StipendioMedio, max(Stipendio) AS StipendioMassimo, min(Stipendio) AS StipendioMinimo, sum(Stipendio) AS StipendioTotalefrom Impiegatogroup by Dipartimento51SQL Operatori aggregati (continua)select Dipartimento, count(*) AS NumeroImpiegatifrom Impiegatogroup by Dipartimentohaving count(*) > 252SQL Operatori aggregati (continua)select Dipartimento, avg(Stipendio) AS StipendioMediofrom Impiegatogroup by Dipartimentohaving avg(Stipendio) > 300053SQL Operatori aggregati (continua)select Dipartimento, max(Stipendio) AS StipendioMassimofrom Impiegatogroup by Dipartimentohaving max(Stipendio) > 500054SQL Operatori aggregati (continua)select Dipartimento, min(Stipendio) AS StipendioMinimofrom Impiegatogroup by Dipartimentohaving min(Stipendio) < 200055SQL Operatori aggregati (continua)select Dipartimento, sum(Stipendio) AS StipendioTotalefrom Impiegatogroup by Dipartimentohaving sum(Stipendio) > 100000
<p>Produzione</p>
<p>l'operatore aggregato (count) viene applicato al risultato dell'interrogazione:</p>
<p>select * from Impiegato where Dipart = 'Produzione'</p>
<p>SQL COUNT: sintassi< | [ | ] ListaAttributi > ) count ( * distinct all select count(Stipendio) as NumeroStipendi from Impiegato select count(distinct Stipendio) as StipendiDiversi from Impiegato</p>
<p>SQL COUNT e valori nulli select count(*) as NumeroImpiegati from Impiegato select count(Stipendio) as NumeroStipendi from Impiegato</p>
<p>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'</p>
<p>escludono opportunamente i valori nulli</p>
<p>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</p>

Dipart = D.Nome and Citta = 'Milano'

Nota: non abbiamo usato la e l'attributo nel risultato non ha asnome 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 ad 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 interrogazione con operatori aggregati

Dettagli
Publisher
A.A. 2012-2013
69 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

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à Università degli Studi dell' Insubria o del prof Gentile Claudio.