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