Data management a.a. 2009-2010 Il linguaggio SQL 1
Modello di 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 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 operazioni relazionali nel linguaggio SQL 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 operazioni relazionali nel linguaggio SQL 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 operazioni relazionali nel linguaggio SQL 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 operazioni relazionali nel linguaggio SQL Uso di più 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 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 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 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