La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

SQL Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko

Presentazioni simili


Presentazione sul tema: "SQL Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko"— Transcript della presentazione:

1 SQL Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko

2 Lezione 4 Compito da casa Esercizio JOIN Cross-join Natural join Theta-join Outer join Aggregazione COUNT SUM AVG MIN, MAX

3 ESERCIZIO Visualizzare i film che hanno degli omonimi (ovvero film con lo stesso titolo ma prodotti in anni diversi o da un diverso produttore) Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) SELECT * FROM Movie as M WHERE exist (SELECT * FROM Movie as M1 WHERE M.title=M1.title and (M.year<>M1.year or M.producerC#<>M1.producerc#)

4 Compito da Casa 1 Quali attori-uomini partecipavano nel film Terms of Endearment? Quali attori partecipavano nel film prodotti da MGM nel 1995? Quali film sono più lunghi del film Gone With the Wind? Chi è dirigente di MGM? Trovare i dirigenti (degli studi) con netWorth maggiore di quello di Mervin Griffin Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

5 Compito da Casa 2 Trovare maker e speed di laptop che hanno hd>30Gb Trovare model e price dei prodotti fatti dal maker=B Trovare tutti maker di laptop che non producono PC Trovare le coppie di model di PC che hanno stessi speed e ram Trovare maker che producono almeno due modelli di PC o laptop con speed>=1000MHz Product (maker, model, type) PC (model, speed, ram, hd, rd, price) Laptop (model, speed, ram, hd, screen, price) Printer (model, color, type, price)

6 Compito da Casa 3 Trovare tutte le navi con displacement>35 tonnelate Trovare name, displacement e numGuns delle navi che partecipavano nelle battaglie (battle) alla isola Guadalcanal Trovare tutti country dove si costruiscono le navi con tipo bb o bc Trovare tutte le navi che, dopo aver ricevuto i danni (result=damaged) in qualche battaglia, partecipavano in altre battaglie Trovare name di battaglie dove partecipavano almeno tre navi dalla stessa country Classes (class, type, country, numGuns, bore, displacement) Ships (name, class, launched) Battles (name, date) Outcomes (ship, battle, result)

7 ESERCIZIO (3 varianti) Dati i seguenti schemi: StarsIn (movieTitle, movieYear, starName) MovieStar (name, address, gender, birthdate) Trovare lelenco degli attori maschi (male) che hanno recitato in Meet the Fockers. SELECT MovieStar.name FROM MovieStar, StarIN WHERE StarIn.title=Meet the Fockers AND MovieStar.gender=male AND MovieStar.name=StarIn.starName SELECT name FROM StarsIn WHERE movieTitle=Meet the Fockers AND name IN (SELECT name FROM MovieStar WHERE gender=male) SELECT name FROM StarsIn WHERE movieTitle=Meet the Fockers INTERSECT SELECT name FROM MovieStar WHERE gender=male

8 Cross join = Prodotto Cartesiano Movie CROSS JOIN StarsIn Si usa molto raramente

9 NATURAL JOIN Il join è creato su tutte le colonne che hanno il medesimo nome in entrambe le tabelle. La tabella del risultato coniene combinazioni delle tuple di due tabelle che hanno stessi valori negli attributi communi Se attributi communi non ci sono, NATURAL JOIN è uguale al CROSS JOIN NATURAL JOIN

10 Eseguire una NATURAL JOIN sulle tabelle: MovieStar (name, address, gender, birthdate) MovieExec (name, address, cert#, netWorth) SELECT * FROM imdb."MovieStar" NATURAL JOIN imdb."MovieExec";

11 JOIN... USING Il NATURAL JOIN esegue join di tutte le colonne che hanno lo stesso nome. Possiamo specificare subset delle colonne su quali fare join JOIN...USING. JOIN USING (,... )

12 Theta-join: INNER JOIN R INNER JOIN S ON C Dati i seguenti schemi: StarsIn (movieTitle, movieYear, starName) Movie (title, year, length, inColor, studioName, producerC#) Visualizzare i dati degli attori e dei film che hanno girato: SELECT * FROM imdb."Movie" JOIN imdb."StarsIn ON "title"="movieTitle";

13 INNER JOIN: Risultato Restituisce solo quelle le righe delle tabelle se c'è un legame, altrimenti non le mostra In algebra R C S = σ C (R S) INNER JOIN = JOIN

14 JOIN: Riassunto Usiamo la keyword NATURAL quando vogliamo che la join venga effettuata sugli attributi che naturalmente collegano le tabelle Usiamo la keyword ON quando desideriamo su quali attributi vogliamo collegare le tabelle

15 FULL OUTER JOIN Il FULL OUTER JOIN restituisce tutte le righe della prima tabella e tutte le righe della seconda tabella, anche se non ci sono corrispondenze.

16 FULL OUTER JOIN Eseguire una NATURAL FULL OUTER JOIN sulle tabelle: MovieStar (name, address, gender, birthdate) MovieExec (name, address, cert#, netWorth) SELECT * FROM imdb."MovieStar" NATURAL FULL OUTER JOIN imdb."MovieExec";

17 LEFT OUTER JOIN Il LEFT OUTER JOIN restituisce tutte le righe della prima tabella, anche se non ci sono corrispondenze nella seconda tabella SELECT campi FROM prima_tabella LEFT OUTER JOIN seconda_tabella ON prima_tabella.chiave_primaria = seconda_tabella.chiave_esterna

18 RIGHT OUTER JOIN Il RIGHT OUTER JOIN restituisce tutte le righe della seconda tabella, anche se non ci sono corrispondenze nella prima tabella SELECT campi FROM prima_tabella RIGTH OUTER JOIN seconda_tabella ON prima_tabella.chiave_primaria = seconda_tabella.chiave_esterna

19 OPERATORI AGGREGATI Gli operatori aggregati costituiscono uno delle più importanti estensioni di SQL rispetto allalgebra relazionale. In algebra relazionale tutte le condizioni vengono valutate su una tupla alla volta Spesso però si devono valutare delle proprietà che dipendono da insiemi di tuple.

20 OPERATORI AGGREGATI Impiegato(nome, congnome, dipart, ufficio, stipendio, città) Supponiamo che si voglia determinare il numero degli impiegati del dipartimento Produzione. Il numero di impiegati corrisponderà al numero di tuple della relazione Impiegato che possiedono Produzione come valore dellattributo Dipart.

21 OPERATORI AGGREGATI Questo numero non è però una proprietà posseduta da una tupla in particolare e perciò linterrogazione non è esprimibile in algebra relazionale. Per esprimerla in SQL usiamo gli operatori aggregati SUM, AVG, COUNT, MIN, MAX

22 COUNT La funzione COUNT restituisce il numero di righe presenti in una tabella. vengono incluse anche le righe con valore NULL vengono escluse le righe con valore NULL per attributo Select Count (*) From NomeTabella Select Count (attributo) From NomeTabella

23 COUNT Visualizzare il numero delle persone registrate nella tabella dellanagrafica che abitano a Milano Anagrafica (Codice, Nome, Indirizzo) Select Count(Indirizzo) From Anagrafica Where Indirizzo=Milano

24 COUNT Calcolare quanti film sono stati prodotti in bianco e nero dopo lanno movie(title, year, length, inColor, studioName, producerC#) SELECT COUNT(*) FROM imdb."Movie" WHERE year>1970 and not inCOLOR

25 SUM Restituisce la somma di tutti i valori contenuti in una colonna specificata Lattributo utilizzato nel calcolo deve essere di tipo numerico. Select Sum(NomeAttributo) From NomeTabella

26 SUM Visualizzare limporto totale dei movimenti riferiti al giorno 12/03/2006 Movimento (Numero, Descrizione, Data, Importo, Codice) Select SUM(Importo) From Movimento Where data=12/03/2006

27 SUM Calcolare la somma della durata di tutti i film prodotti nellanno movie(title, year, length, inColor, studioName, producerC#) SELECT SUM(length) FROM imdb."Movie" WHERE year=1970

28 AVG Calcola la media (average) dei valori (numerici) contenuti in una determinata colonna di una tabella. Select Avg(NomeAttributo) From NomeTabella

29 AVG Calcolare limporto medio dei movimenti Movimento (Numero, Descrizione, Data, Importo, Codice) Select Avg(Importo) From Movimento

30 AVG Calcolare la media della durata di tutti i film prodotti nellanno movie(title, year, length, inColor, studioName, producerC#) SELECT AVG(length) FROM imdb."Movie" WHERE year=1970

31 MIN, MAX Restituiscono rispettivamente il valore minimo e il valore massimo tra i valori della colonna specificata come argomento della funzione (anche per campi di tipo carattere). Gli operatori ignorano i campi con valore Null Select Min(NomeAttributo),Max(NomeAttributo) From NomeTabella

32 MIN, MAX Visualizzare la lunghezza minima e massima dei film prodotti nellanno movie(title, year, length, inColor, studioName, producerC#)

33 COMPITO DA CASA ESERCIZI PROVETTE DEGLI ANNI SCORSI RISPOSTE AI COMPITI DEL TERZO SLIDE ALTRI EZERCIZI

34 ESERCIZIO Dato lo schema Movie (title, year, length, inColor, studioName, producerC#) Elencare la somma della durata di tutti i film in bianco e nero. Elencare la durata max e min tra quelli in bianco e nero

35 ESERCIZIO Visualizzare i film che hanno la lunghezza massima tra tutti i film nella tabella Movie. Movie (title, year, length, inColor, studioName, producerC#)

36 ESERCIZIO Visualizzare tutti i film che superano la lungheza media. Movie (title, year, length, inColor, studioName, producerC#)

37 ESERCIZIO Estrarre i nomi e i cognomi di tutti gli impiegati, eccEtto quelli che appartengono al dipartimento di amministrazione, mantenendo i duplicati. IMPIEGATO (Nome, Cognome, Dipart, Ufficio, Stipendio, Città) DIPARTIMENTO (Nome, Indirizzo, Città )

38 ESERCIZIO Estrarre il dipartimento dellimpiegato che guadagna lo stipendio Massimo (usando solo un interrogazione nidificata) IMPIEGATO (Nome, Cognome, Dipart, Ufficio, Stipendio, Città) DIPARTIMENTO (Nome, Indirizzo, Città)

39 ESERCIZIO Estrarre le persone che hanno degli omonimi (ovvero persone con lo stesso nome e cognome, ma diverso codice fiscale) PERSONA (CodFiscale, Nome, Cognome, Città)

40 ESERCIZIO Calcolare la somma della durata di tutti i film prodotti nellanno 1970.

41 ESERCIZIO Elencare la somma della durata di tutti i film in bianco e nero. Elencare la durata max e min tra quelli in bianco e nero

42 ESERCIZIO Elencare, in ordine di durata decrescente, tutti i film in cui ha partecipato lattrice Roberts Julia.

43 ESERCIZIO Trovare il numero dei titoli distinti dei films. Qual è, invece, il numero totale dei film? Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

44 ESERCIZIO Visualizzare la star che ha partecipato al film più breve in assoluto e quella che ha partecipato al piu lungo Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

45 ESERCIZIO Visualizzare i film prodotti, prima del 1967, da studi cinematografici il cui presidente sia (anche) un attore e abbia un networth > di Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

46 ESERCIZIO Selezionare gli studi cinematografici il cui presidente ha partecipato ad almeno un film prodotto dallo studio stesso. Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

47 ESERCIZIO Estrarre lo Studio cinematografico il cui presidente guadagna di meno (fornire due soluzioni differenti: la prima usando loperatore min, la seconda usando uninterrogazione nidificata). Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

48 ESERCIZIO Estrarre i film in cui non hanno recitato attori provenienti da New York (fornire DIFFERENTI due soluzioni allesercizio ) Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#)

49 Provetta 2006 Esprimere le sequenti interrogazioni tramite SQL ed algebra relazionale dati I seguenti schemi: Lavora-in (CodImpigato, CodUfficio) Ufficio (CodUfficio, Nome, Descrizione, Indirizzo, Città) Impiegato (CodImpiegato, Nome, Cognome, Titolo, Stipendio) Vizualizzare nome (NomeImpiegato, CognomeImpiegato), Titolo e dati dellufficcio (NomeUfficio, Reapito, Città) in cui lavorano tutti gli impiegati che percepiscono uno stipendio mensile superiore ai 1500 euro Vizualizzare la media degli stipendi per ciascun ufficio

50 Provetta 2006 ESAMI (matricola, esame, data, voto) STUDENTI (matricola, nome, residenza, datadinascita, laurea) Si scrive una query SQL che, relativamente ai soli esami del corso di laurea con codice C2, fornisca per ogni esame le seguenti informazioni: numero di appelli effetuati, numero medio di studenti esaminati per appello, votazione media riportata dagli studenti La query fornisca anche il numero medio di volte che è stato dato ciascun voto e letà media degli studenti al momento del superamento dellesame

51 Provetta 2008 AUTO (Targa, Marca, Cilindrata, Potenza, CodF, CodAss) PROPRIETARI (CodF, Nome, Residenza) ASSICURAZIONI (CodAss, Nome, Sede) SINISTRO (CodS, Località) AUTOCOINVOLTE (CodS, Targa, ImportoDelDanno) Estratte CodF e Nome del coloro che possiedono solo auto, con cilindrata superiore a 1.4, di almeno tre marche differenti Estrarre il codice dei sinistri in cui non sono state coinvolte auto con cilindrata inferiore a 2000cc Estrarre per ciascuna auto coinvolta in più di un sinistro, la targa dellauto, il nome dellAssicurazione ed il totale dei danni riportati

52 Compito da Casa 3 con risposte Trovare tutte le navi con displacement>35 tonnelate Trovare name, displacement e numGuns delle navi che partecipavano nelle battaglie (battle) alla isola Guadalcanal Trovare tutti country dove si costruiscono le navi con tipo bb o bc Trovare tutte le navi che, dopo aver ricevuto i danni (result=damaged) in qualche battaglia, partecipavano in altre battaglie Trovare name di battaglie dove partecipavano almeno tre navi dalla stessa country Classes (class, type, country, numGuns, bore, displacement) Ships (name, class, launched) Battles (name, date) Outcomes (ship, battle, result)

53 Query 1 select * from "Ships" where "class" in ( select "class" from "Classes" where "displacement" > 35 )

54 Query 2 select "S"."name", "C"."displacement", "C"."numGuns" from "Ships" as "S", (select "class", "displacement", "numGuns" from "Classes") as "C" where "C"."class"="S"."class" and "S"."name" in (select "ship" from "Outcomes" where "battle"='Guadalcanal')

55 Query 3 select "country" from "Classes" where "type"='bb' or "type"='bc'

56 Query 4 select "O"."ship", "O"."battle", "B"."date" from "Outcomes" as "O", "Battles" as "B" where "O"."battle"="B"."name" and Exists ( select "O1"."ship", "B1"."date" as "date" from "Outcomes" as "O1", "Battles" as "B1" where "O1"."battle"="B1"."name" and "O1"."result"='damaged' and "date"<"B"."date" and "O"."ship"="O1"."ship")

57 Query 5 select "name" from "Battles" where "name" in ( select "battle" from "Outcomes where exists ( select "s1"."name", "c1"."country", "s2"."name", "c2"."country", "s3"."name", "c3"."country" from "Ships" "s1", "Ships" "s2", "Ships" "s3", "Classes" "c1", "Classes" "c2", "Classes" "c3" where "s1"."name">"s2"."name" and "s2"."name">"s3"."name" and "c1"."country"="c2"."country" and "c3"."country"="c2"."country" and "s1"."class"="c1"."class" and "s2"."class"="c2"."class" and "s3"."class"="c3"."class" and ("s1"."name"="Outcomes"."ship" or "s2"."name"="Outcomes"."ship" or "s3"."name"="Outcomes"."ship")))

58 Compito da Casa 1 Trovare maker di PC con speed >=1200MHz Trovare tutti i Printer con prezzo massimo Trovare tutti i Laptop con speed meno di qualsiasi speed di qualsiasi PC Trovare model di qualsiasi prodotto (PC, Laptop, Printer) con il prezzo massimo Trovare maker che producono i printer di prezzo minimo che hanno color=true Trovare I maker di PC con il massimo valore di speed tra I quelli PC che hanno ram minimo Product (maker, model, type) PC (model, speed, ram, hd, rd, price) Laptop (model, speed, ram, hd, screen, price) Printer (model, color, type, price)

59 Compito da Casa 2 Trovare country che producono le navi con il massimo numero di numGuns Trovare class di navi che hanno result=sunk in qualche battaglia Trovare name delle navi che hanno missili di calibro born>16 pollici Trovare name di battaglie dove partecipavano le navi di class=Kongo Trovare name delle navi con numGuns massimo tra le navi che hanno I missili dello stesso calibro (bore) Classes (class, type, country, numGuns, bore, displacement) Ships (name, class, launched) Battles (name, date) Outcomes (ship, battle, result)


Scaricare ppt "SQL Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko"

Presentazioni simili


Annunci Google