Esercitazione per il corso “Basi di Dati”

Slides:



Advertisements
Presentazioni simili
Principale limitazione di AR e SQL-92: interrogazioni ricorsive
Advertisements

Microsoft SQL Server 2008 Utilizzo. Creazione DataBase CREATE DATABASE CREATE DATABASE Cinema.
SQL (Standard query language) Istruzioni per la creazione di una tabella: Create table ( tipo, (, [vincoli]) Primary key ( ) CHIVE PRIMARIA Foreign key(
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
Principale limitazione di AR e SQL-92: interrogazioni ricorsive IMPIEGATO NOMENOMECAPO RossiVerdi NeriVerdi DeSio TucciDeSio DeLucaDeSio Lazio selezionare.
Un DataBase Management System (DBMS) relazionale client/server.
MySQL Esercitazioni. Ripasso Connessione a MySQL. Creazione delle basi di dati e delle tablelle. Inserimento dei dati. Interrogazioni.
Ergo : what is the source of EU-English? Standard British English? Standard American English? Both!!!! See morphology (use of British.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
1 DBLP Ontology SAPIENZA Università di Roma Facoltà di Ingegneria Tesina per il corso di Seminari di ingegneria del software Anno accademico 2006/2007.
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 81 Ricerca e visualizzazione delle informazioni Gestione, ricerca, navigazione: accesso alle.
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SQL: Lezione 7 Nataliya Rassadko
SQL: Lezione 2 Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko
SQL: Lezione 6 Nataliya Rassadko
Nataliya Rassadko SQL: Lezione 9 Nataliya Rassadko
Nataliya Rassadko SQL: Lezione 5 Nataliya Rassadko
Nataliya Rassadko SQL: Lezione 8 Nataliya Rassadko
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SQL: Lezione 10 Nataliya Rassadko
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999 Capitolo 4:SQL 11/10/2001.
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
PRODOTTO CARTESIANO Otteniamo un prodotto cartesiano quando: viene omessa la condizione di join una condizione di join non è valida tutte le righe della.
FUNZIONI DI GRUPPO Le funzioni di gruppo operano su un set di record restituendo un risultato per il gruppo. AVG ([DISTINCT|ALL] n) media, ignora i valori.
Constraints.
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL OPERATORI INSIEMISTICI IN SQL Siano due tabelle: GiochiSolitari(CodiceGioco, NomeGioco, PrezzoGioco)
Università degli studi di Modena e Reggio Emilia Facoltà di Ingegneria di Modena Corso di Laurea Specialistica in Ingegneria Informatica Analisi e valutazione.
Università degli studi di Catania
Uso delle basi di dati Mauro Mezzini Dipartimento di Scienze della Formazione.
Modulo 1 bis Menù Incolla Esercitazione Un computer è quasi umano, a parte il fatto che non attribuisce i propri errori a un altro computer. (Anonimo)
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
GENESOFT Il web multimediale per la terza età Relatore : Marco Casario Genesoft Srl
INTERNET Antonio Papa Classe 2^ beat I.S.I.S. G. Meroni a.s. 2007/2008.
Facelets case study: Ricettario Docente: Gabriele Lombardi
Guardate le seguenti due frasi:
The Brooklyn Bridge stands as a testament to hard work. An iconic landmark and historical site, it is one of the oldest suspension bridges in the United.
SEMINARIO INGEGNERIA DEL SOFTWARE a.a. 2006/2007
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Il linguaggio MDX Il linguaggio MDX (MultiDimensional eXpression) è usato per recuperare e manipolare dati multidimensionali in SQL Server Analysis Services,
Collection & Generics in Java
YOUR ITALIAN CV Step-by-step guide to create CURRICULUM VITAE in Italian language.
SQL Developer Lanciare sqldeveloper (alias sul desktop) / c:\Oracle\sqldeveloper Associare tutti i tipi di file, se volete Tasto destro sulla spina “connection”
Dynamic SQL.
Esercitazione 7.
ClienteNomeCCittà RossiC1Roma RossiC2Milano BianchiC3Roma VerdiC4Roma ArticoloADenom.Prezzo A1Piatto3 A2Bicchiere2 A3Tazza4 OrdineCANpezzi C1A1100 C2A2200.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
rielaborato da Atzeni-etal., Basi di dati, Capitolo 4
Interrogazione di una base di dati relazionale
Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Basi di dati multimediali Gabriele Monfardini - a.a
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Frequenza di fallimento della terapia di prima linea basata su INI vs
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
SQL per la modifica di basi di dati
Classe V A A.s – 2012 Programma di Informatica
Nomi degli studenti che quest’anno hanno preso un voto
Transcript della presentazione:

Esercitazione per il corso “Basi di Dati” SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper Nataliya Rassadko rassadko@disi.unitn.it nota 1

Lezione 3 Compito da casa Ambiguità Variabili Operazioni su insiemi INTERSECT UNION DIFFERENCE Subquery

NomeTabella.NomeAttributo AMBIGUITA’ Come possiamo distinguire gli attributi con gli stessi nomi? MovieStar(name, address, gender, birthdate) MovieExec(name, address, cert#, netWorth) SQL permette l’utilizzo di espressioni: NomeTabella.NomeAttributo Questo elimina il problema dell’ambiguità, cioè l’impossibilità di capire a quale specifico attributo si fa riferimento all’interno di una query

AMBIGUITA’ Visualizzare l’elenco delle coppie (attori, produttori) che hanno lo stesso indirizzo 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 “MovieStar"."name" AS starName, "MovieExec"."name" AS producerName FROM imdb."MovieStar", imdb."MovieExec" WHERE "MovieStar"."address"="MovieExec"."address";

Esercizio alla lavagna Formula algebrica per πStar1.name,Star2.name( σStar1.address=Star2.address and Star1.name<Star2.name( ρM(Star1.name,address,gender,birthdate)(MovieStar)× ρM(Star2.name,address,gender,birthdate)(MovieStar))) SELECT “MovieStar"."name" AS starName, "MovieExec"."name" AS producerName FROM imdb."MovieStar", imdb."MovieExec" WHERE "MovieStar"."address"="MovieExec"."address";

USO DI VARIABILI SQL permette di utilizzare più istanze della stessa tabella all’interno della clausola FROM Per fare questo è necessario fare un riferimento preciso all’istanza della tabella che si sta utilizzando AS è la keyword che ci permette di fare questo

USO DI VARIABILI È possibile far riferimento a più esemplari della stessa tabella. Tutte le volte che si introduce una alias per una tabella si dichiara in effetti una variabile di tipo tabella, che possiede come valore il contenuto della tabella di cui è alias. SELECT table1.attribute, table2.attribute FROM table AS table1, table AS table2 WHERE condizione

ESERCIZIO (alla lavagna+demo) Visualizzare l’elenco delle coppie di attori che convivono: 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 “Star1”.“name” AS nameA, “Star2”.”name” AS nameB FROM “MovieStar” AS Star1, “MovieStar” AS Star2 WHERE “Star2”.”address”=“Star2”.”address” AND “Star1”.”name”>“Star2”.”name”; Select "Star1"."name", "Star2"."name" from "MovieStar" "Star1", "MovieStar" "Star2" where "Star1"."address"="Star2"."address" and "Star1"."name"<"Star2"."name“ Show <>

Operazioni sugli Insiemi INTERSECT UNION EXCEPT

UNIONE In SQL il comando che permette di ottenere l’unione tra il risultato di diverse query è UNION

UNIONE L'operatore UNION esegue l’unione insiemistica di due tabelle generate da comandi SELECT, secondo la seguente sintassi. dove i <campi> devono ovviamente essere gli stessi nelle due SELECT.

UNIONE Il risultato di una UNION consiste di tutti gli elementi della prima tabella piu’ tutti gli elementi della seconda tabella; Con UNION i duplicati vengono cancellati automaticamente Per mantenere i duplicati dobbiamo usare la parola chiava ALL

ESERCIZIO Visualizzare l’elenco dei titoli e degli anni che appaiono sia nella tabella Movie sia nella tabella StarsIn 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 “title", “year" FROM imdb."Movie“ UNION SELECT “movieTitle“ AS “title”, “movieYear“ AS “year” FROM imdb.“StarsIn“

UNIONE La prima parte della query estrae titolo e anno dei film presenti nella tabella Movie. La seconda della query estrae titolo e anno presenti nella tabella StarsIn. UNION esegue l’unione dei due output. SQL richiede che la lista di colonne di entrambe le select siano uguali per tipo, colonna per colonna. SQL elimina automaticamente le righe duplicate usando UNION.

INTERSEZIONE SQL mette a disposizione il comando INTERSECT per ottenere l’intersezione dei risultati di due differenti query. Il risultato di una INTERSECT consiste solo degli elementi che compaiono in entrambe le tabelle

INTERSEZIONE L'operatore INTERSECT esegue l’intersezione insiemistica di due tabelle generate da comandi SELECT, secondo la seguente sintassi. dove i <campi> devono ovviamente essere gli stessi nelle due SELECT.

ESERCIZIO Visualizzare i nomi e gli indirizzi degli attori di sesso maschile che hanno prodotto un film con un “netWorth” maggiore di $1.000.000: 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 "name", "address" FROM imdb."MovieStar“ WHERE "gender"='M') INTERSECT FROM imdb."MovieExec" WHERE "netWorth">1000000);

INTERSEZIONE La prima parte estrae tutti gli attori di sesso maschile dalla tabella MovieStar. La seconda parte estrae tutti i produttori di film con il parametro netWorth > $1.000.000 INTERSECT esegue l’intersezione dei due risultati e ritorna solo le righe presenti in entrambe le parti, quindi gli attori/produttori che rispettano le condizioni espresse in entrambi le parti delle query.

DIFFERENZA In sql il comando che permette di ottenere la differenza tra due set di attributi con lo stesso nome e’ EXCEPT. 1 2 3

DIFFERENZA L'operatore EXCEPT esegue la differenza insiemistica di due tabelle generate da comandi SELECT, secondo la seguente sintassi. dove i <campi> devono ovviamente essere gli stessi nelle due SELECT.

ESERCIZIO Visualizzare tutti i produttori (name,address) che non sono attori: 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 “name", “address" FROM imdb."MovieExec“) EXCEPT (SELECT “name“, “address” FROM imdb.“MovieStar“)

SUBQUERY Le espressioni delle clausole FROM e WHERE possono essere presentati come SELECT Si parla in questo caso di interrogazione nidificate In SQL una query che è parte di un’altra query prende il nome di SUBQUERY Una SUBQUERY può: Ritornare una singola costante da comparare con un altro valore nella clausola WHERE Ritornare una tabella da utilizzare in modi differenti nella clausola WHERE Ritornare una tabella da utilizzare nella clausola FROM

ESERCIZIO (SUBQUERY 1) Vediamo la query che ritorna il nome dei produttori del fim con titolo “Someone Like You …” : 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 "name" FROM imdb."Movie", imdb."MovieExec" WHERE "title"='Someone Like You...' AND "producerC#"="cert#";

SUBQUERY La query vista nella slide precedente può essere formulta utilizzando le interrogazioni nidificate: 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 "name" FROM imdb."MovieExec" WHERE "cert#"= (SELECT "producerC#" FROM imdb."Movie" WHERE "title"='Someone Like You...');

SUBQUERY 2 Se confrontiamo un attributo con il risultato di una interrogazione, abbiamo il problema della disomogeneità dei termini di confronto. Da una parte abbiamo il risultato dell’esecuzione di una interrogazione SQL (insieme di valori) Dall’altra abbiamo il valore dell’attributo per la particolare riga.

SUBQUERY 2: CONDIZIONI SULLE TABELLE EXISTS R true se R non e’ vuota; s IN R true se s e’ contenuta in R; s NOT IN R true se s non e’ contenuta in R; s > ALL R true se s e’ maggiore di tutti i valori in R; s > ANY R true se s e’ maggiore di almeno un valore in R NOT

TUPLE in WHERE con SUBQUERY query nidificata ritorna relazione, quindi operatore IN SELECT name FROM MovieExec WHERE cert# IN (SELECT producerC# FROM Movie WHERE (title, year) IN (SELECT movieTitle, movieYear FROM StarsIn WHERE starName=‘Harrison Ford’)) (title, year) sono tuple paragonate con relazione nidificata tramite IN (movieTitle, movieYear) per garantire che tutte le tuple sono uniche

Query Precedente SELECT name FROM MovieExec, Movie, StarsIn WHERE cert#=producer# AND title=movieTitle AND year=movieYear AND starName=‘HarrisonFord’

SUBQUERY Subquery possono essere calcolati solo una volta (se siamo fortunati) e il risultato si utilizza nelle query “esterne” In altro caso, quando subquery si valutano tante volte, si tratta di subquery correlati

ESEMPIO Seleziona i film con gli stessi nomi ma prodotti in anni diversi 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 “title" FROM "Movie“ AS “Old”, WHERE “year“<ANY (SELECT “year” FROM “Movie” WHERE “title"=“Old".“title”);

SUBQUERY 3 E’ possibile utilizzare la subquery nella clausola FROM al posto di una relazione. Query che restituisce i produttori dei film in cui attore e’ Robert De Niro 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 "name" FROM imdb."MovieExec", (SELECT "producerC#“ FROM imdb."Movie", imdb."StarsIn“ WHERE "title"="movieTitle" AND "year"="movieYear" AND "starName"='De Niro, Robert') AS "Prod" WHERE "cert#"="Prod"."producerC#";

EXIST L’operatore logico Exist ammette come parametro un’interrogazione nidificata e restituisce il valore vero solo se l’interrogazione fornisce un risultato non vuoto. Questo operatore può essere usato in modo significativo solo quando di “var” tra l’interrogazione esterna e nidificata.

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#”)

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#)

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, screem, price) Printer (model, color, type, price)

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)