Data
Data management
management
a.a.
a.a. 2009-2010
2009-2010
Il linguaggio SQL
1
Modello
Modello di
di database
database
• E' un database generico con anagrafica e
movimenti di uso molto frequente: per
esempio, clienti e fatture, studenti ed
esami sostenuti, contribuenti e versamenti
di imposta, prodotti e movimenti di
magazzino, conti e movimenti contabili,
ecc.)
• Due entità : Anagrafica e Movimento
• Associazione : uno a molti
• Ogni Anagrafica può essere relativa a uno
o più Movimenti.
• Ogni Movimento deve essere riferito a una
sola Anagrafica
2
Tabelle
Tabelle derivate
derivate
• Anagrafica (Codice, Nome, Indirizzo)
• Movimento (Numero, Descrizione, Data,
Importo, Codice)
⇒Codice : chiave della tabella Anagrafica
⇒Numero : chiave della tabella Movimento
→Codice : chiave esterna della tabella
Movimento
3
Le
Le operazioni
operazioni relazionali
relazionali
nel
nel linguaggio
linguaggio SQL
SQL
Selezione
Selezione
SELECT *
FROM NomeTabella
WHERE Condizione
• Date le tabelle:
Anagrafica (Codice, Nome, Indirizzo)
Movimento (Numero, Descrizione, Data,
Importo, Codice)
• si vuole ottenere l'elenco delle anagrafiche
con Indirizzo = ‘Milano’
Select *
From Anagrafica
Where Indirizzo = ‘Milano’
4
Le
Le operazioni
operazioni relazionali
relazionali
nel
nel linguaggio
linguaggio SQL
SQL
Proiezione
Proiezione
SELECT Colonna1, Colonna2, …
FROM NomeTabella
• si vuole ottenere l’elenco dei codici e dei
nomi delle anagrafiche.
Select Codice, Nome
From Anagrafica
• si vuole ottenere l’elenco dei movimenti
con data e importo
Select Data, Importo
From Movimento
5
Le
Le operazioni
operazioni relazionali
relazionali
nel
nel linguaggio
linguaggio SQL
SQL
Congiunzione
Congiunzione
SELECT *
FROM Tabella1, Tabella2
WHERE Tabella1.Attrib1 = Tabella2.Attrib2
• si vuole ottenere l’elenco dei movimenti
con i dati anagrafici ad essi relativi
(Operazione relazionale: congiunzione di
Anagrafica su Codice e di Movimento su
Codice)
Select *
From Anagrafica, Movimento
Where Anagrafica.Codice=
Movimento.Codice
6
Le
Le operazioni
operazioni relazionali
relazionali nel
nel
linguaggio
linguaggio SQL
SQL
Uso
Uso di
di più
più operatori
operatori
SELECT Colonna1, Colonna2, ...
FROM Tabella1, Tabella2
WHERE Tabella1.Attrib1 = Tabella2.Attrib2
AND Condizione
• si vuole ottenere l’elenco dei movimenti
con Nome e Importo riferiti alle
anagrafiche aventi un indirizzo prefissato
Select Nome, Importo
From Anagrafica, Movimento
Where Anagrafica.Codice=
Movimento.Codice
And Indirizzo = [Quale
Indirizzo]
7
Funzione
Funzione COUNT
COUNT
• La funzione COUNT restituisce il numero
di righe presenti in una tabella.
Select Count (*)
From NomeTabella
Select Count (NomeAttributo)
From NomeTabella
• Esempio:
Numero delle persone registrate nella
tabella delle anagrafiche aventi un
indirizzo prefissato
Select Count(*)
From Anagrafica
Where Indirizzo = [Quale
Indirizzo]
8
Funzione
Funzione SUM
SUM
• Restituisce la somma di tutti i valori
contenuti in una colonna specificata
(l’attributo utilizzato nel calcolo deve
essere di tipo numerico)
Select Sum (NomeAttributo)
From NomeTabella
• Esempio:
Importo totale dei movimenti riferiti a
un codice prefissato
Select Sum(Importo)
From Movimento
Where Codice = [Quale Codice]
9
Esercizi
Esercizi
• si vuole ottenere l’elenco dei
movimenti relativi al codice 0358.
Select *
From Movimento
Where Codice = ‘0358’
• si vuole ottenere l’elenco dei
movimenti con codice, data e
importo
Select Codice, Data, Importo
From Movimento
10
• si vuole ottenere l’elenco con Nome
anagrafico e Numero di
registrazione dei movimenti
Select Nome, Numero
From Movimento, Anagrafica
Where Movimento.Codice =
Anagrafica.Codice
• Data dei movimenti con Indirizzo
dell’anagrafica
Select Data, Indirizzo
From Movimento, Anagrafica
Where Movimento.Codice =
Anagrafica.Codice
11
• Numero di registrazione dei
movimenti riferiti all’anagrafica
avente il Nome ‘Marco’
Select Numero
From Movimento, Anagrafica
Where Movimento.Codice =
Anagrafica.Codice
And Nome = ‘Marco’
• Nome anagrafico, Data e Importo
dei movimenti riferiti a un indirizzo
prefissato
Select Nome, Data, Importo
From Movimento, Anagrafica
Where Movimento.Codice =
Anagrafica.Codice
And Indirizzo =
[prefissato]
12
• Calcolare il numero dei movimenti
con importo superiore a 10.000.
Select Count(*)
From Movimento
Where Importo > 10.000
• Calcolare la somma degli importi
per i movimenti che si riferiscono
alle anagrafiche della persona di
nome ‘Marco’ e in data 10/02/2000.
Select Sum(Importo)
From Movimento, Anagrafica
Where Movimento.Codice =
Anagrafica.Codice
And Nome = ‘Marco’ And Data
= ‘10/02/2000’
13
ESERCIZIO SQL
Dato il seguente schema relazionale:
• Regista(Nome, DataNascita, Nazionalita`)
• Film(Titolo, NomeRegista, Anno)
• Proiezione(Nomecinema, Nomefilm, Citta`)
• Selezionare le Nazionalita`dei
registi che hanno diretto dei
film nel 1992 ma non hanno
diretto film nel 1993.
select distinct nazionalita`
from Regista
where Nome in (select nomeRegista
from Film
where Anno=`1992`) and
Nome not in (select NomeRegista
from Film
where Anno=`1993`)
14
• Individuare i nomi dei registi
che hanno girato nel 1993 piu`
film di quanti ne avevano girati
nel 1992.
select NomeRegista
from Film as F
where Anno=`1993`
group by NomeRegista
having count(*) > (select count(*)
from Film as F1
where
F.NomeRegista=F1.NomeRegista
and Anno=`1992`)
15
• Individuare le date di nascita
dei registi che hanno diretto
film che sono stati proiettati
sia a Torino che a Milano.
select Datanascita
from Regista join Film on
(Nome=NomeRegista)
where Titolo in (select NomeFilm
from Proiezione
where Citta=`Milano`) and
Titolo in (select NomeFilm
from Proiezione
where Citta=`Torino`)
16