Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C

Slides:



Advertisements
Presentazioni simili
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
Advertisements

Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (IV) SQL (Slide tratte in parte da da Atzeni, Ceri,
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (III) SQL (Slide tratte in parte da da Atzeni, Ceri,
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 24/09/2002.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Rileaborato da M. Lenzerini - Basi di dati
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
Rielaborato da Atzeni et al., Basi di Dati, Mc-Graw Hill
Universita’ di Milano Bicocca Corso di Basi di Dati 1 in eLearning C
Rielaborato da Atzeni et al., Basi di Dati, Mc-Graw Hill
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 et al., Basi di Dati, Mc-Graw Hill
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Rielaborato da Atzeni et al., Basi di dati, Mc-Graw Hill
rielaborato da Atzeni-etal., Basi di dati, Capitolo 4
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
Interrogazione di una base di dati relazionale
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Rielaborato da Atzeni et al., Basi di dati, Mc-Graw Hill
Rielaborato da Atzeni et al., Basi di dati, Mc-Graw Hill
Universita’ di Milano Bicocca Corso di Basi di Dati 1 in eLearning C
Rielaborato da Atzeni et al., Basi di Dati, Mc-Graw Hill
Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3
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 et al., Basi di dati, Mc-Graw Hill
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
A. A – 2008 Basi di dati 1 Corso Prof
Rielaborato da Atzeni et al., Basi di Dati, Mc-Graw Hill
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
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
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
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Rielaborato da Atzeni et al., Basi di Dati, Mc-Graw Hill
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
SQL, Definizione e interrogazione di basi di dati
Interrogazioni Nidificate
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Structured Query Language
Operatori aggregati e raggruppamenti
Quantificazione Esistenziale ed Universale
Selezione e Proiezione
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
Transcript della presentazione:

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. Batini 7. SQL DML 7.11 Interrogazioni nidificate Regole di visibilita’

Regole di visibilita’ nelle espressioni nidificate 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Interrogazioni nidificate, regole di visibilità – 1 non è possibile fare riferimenti da blocchi esterni a variabili (cioe’ nomi definiti con la clausola as) definite in blocchi più interni  perche’ si assume che se e’ stata dichiarata in una SELECT interna sia utilizzabile solo li’ select Nome.P1, Reddito.P1, Reddito.P2 from Persone P1 where Nome.P2 in (select Padre from Paternita where Figlio = any (select Nome from Persone P2 where Reddito > 20)) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Altro esempio di visibilità scorretta select * from Impiegato where Dipart in (select Nome from Dipartimento D1 where Nome = 'Produzione') or Dipart in (select Nome from Dipartimento D2 where D2.Citta = D1.Citta) D1 definita nel blocco sopra 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Esercizio 7.11.1 Nell’esempio precedente chi ha scritto la interrogazione voleva probabilmente trovare gli impiegati del Dipartimento Produzione e dei Dipartimenti localizzati nella stessa citta’ del Dipartimento Produzione. Scrivi una interrogazione SQL che ha lo stesso significato, ma rispetta le regole di visibilita’ 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Interrogazioni nidificate, regole di visibilità – 2 2. in un blocco si può invece fare riferimento a variabili definite in blocchi più esterni select Nome.P1, Reddito.P1, Reddito.P2 from Persone P1, Persone P2 where Nome.P1 in (select Padre from Paternita where Figlio = any (select Nome from P2 where Reddito > 20)) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Interrogazioni nidificate, regole di visibilità – 3 3. se un nome di variabile è omesso, si assume come riferimento la variabile più “vicina” dichiarata all’esterno. 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Interrogazioni nidificate, regole di visibilità – 4 Attenzione! A seguito della regola 1, che afferma non è possibile fare riferimento a variabili definite in blocchi più interni la semantica “bottom up” che recita esegui prima l’interrogazione interna e poi nella esecuzione della where esterna utilizza per tutte le n-ple il risultato intermedio non puo’ essere piu’ applicata. Infatti  15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Ricordiamo la semantica “bottom up” Esempio: Data la Relazione Persona (Codice Fiscale, Nome, Cognome) trovare le persone che hanno degli omonimi (cioe’ persone con stesso nome e cognome ma diverso codice fiscale) Select * from Persona P where exists (select * from Persona P1 where P1. Nome = P.Nome and P1. Cognome = P.Cognome and P1. CodFiscale not = P.CodFiscale) Come faccio a eseguire la interrogazione interna senza assegnare un valore alla variabile P? 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Interrogazioni nidificate, regole di visibilità – 4 Attenzione! Quindi non e’ possibile “eseguire” la interrogazione dai blocchi interni verso i blocchi esterni 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Vale ancora e solo la semantica top-down Quando in un blocco interno si riferimento a variabili definite in blocchi più esterni, l’interrogazione nidificata viene valutata separatamente per ogni n-pla prodotta nella valutazione della query esterna. Quindi per ogni n-pla di una query esterna si esegue il blocco piu’ interno e poi si confronta.  Semantica top down 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Esempio di applicazione della regola 4 nella costruzione della interrogazione I padri i cui figli guadagnano tutti più di venti mila € 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Nome Età Persone Reddito Madre Maternità Figlio Luisa Anna Maria Olga Filippo Andrea Aldo Luigi Andrea 27 Maria 55 Anna 50 Filippo 26 Luigi Franco 60 Olga 30 Sergio 85 Luisa 75 Aldo 25 21 42 35 40 20 41 87 15 Legami logici Padre Paternità Figlio Luigi Franco Sergio Olga Filippo Andrea Aldo 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Esempio di applicazione della regola 4 I padri i cui figli guadagnano tutti più di venti mila € select distinct Padre from Paternita Z where not exists (figli_che_guadagnano_ meno_di_20mila) Per ogni padre, cerchiamo con una query interna se non esistono, per quel padre, figli che guadagnano meno di 20 mila. Se non esistono lo selezioniamo  Clausola not exist 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill I padri i cui figli guadagnano tutti più di venti mila select distinct Padre from Paternita where not exists ( figli_che_guadagnano_ meno_di_20mila ) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill I padri i cui figli guadagnano tutti più di venti mila select distinct Padre from Paternita where not exists ( ) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill I padri i cui figli guadagnano tutti più di venti mila select distinct Padre from Paternita where not exists ( select * from Persone ) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill I padri i cui figli guadagnano tutti più di venti mila select distinct Padre from Paternita where not exists ( select * from Persone where Figlio = Nome ) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill I padri i cui figli guadagnano tutti più di venti mila select distinct Padre from Paternita where not exists ( select * from Persone where Figlio = Nome and Reddito <= 20 ) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

Meno compatta ma ugualmente corretta select distinct Padre from Paternita Z where not exists ( select * from Paternita W, Persone where W.Padre = Z.Padre and W.Figlio = Nome and Reddito <= 20) Cerchiamo i Figli: Accoppiando la copia Z di Paternita’ con la copia “interna” di Paternita’ e poi 2 accoppiando tale relazione con Persone, per trovare i padri con figli con reddito <=20 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Altro esempio: nella relazione Persona (CodFiscale, Nome, Cognome), trovare le persone che non hanno omonimi Prima la Select * from Persona P where exists (select * from Persona P1 where P1. Nome = P.Nome and P1. Cognome = P.Cognome and P1. Codfiscale not = P.Cod.Fiscale) Trovava le persone che hanno omonimi. Ora? Select * where not exists (select * from Persona P1 where P1. Nome = P.Nome and 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Disgiunzione e unione select * from Persone where Reddito > 30 union select F.* from Persone F, Paternita, Persone P where F.Nome = Figlio and Padre = P.Nome and P.Reddito > 30  Risultato Le persone che hanno un reddito > di 30 insieme alle persone i cui padri hanno un reddito > di 30 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Disgiunzione e unione select * from Persone where Reddito > 30 union select F.* from Persone F, Paternita, Persone P where F.Nome = Figlio and Padre = P.Nome and P.Reddito > 30 Formulazione equivalente con exists e query nidificata select * from Persone F where Reddito > 30 or exists (select * from Paternita, Persone P where F.Nome = Figlio and Padre = P.Nome and P.Reddito > 30) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Approfondimento 7.11.1 Leggi e studia la sezione 4.8 del libro di riferimento, dove sono proposte alcune interrogazioni in SQL e Algebra relazionale (ignora le parti degli esercizi sul calcolo relazionale e sul Prolog, che non fanno parte del programma) 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Esercizio 7.11.2 Esegui l’esercizio 4.7 del testo di riferimento, domande 10-12. 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Esercizio 7.11.3 Esegui l’esercizio 4.8 del testo di riferimento. 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill

adattato da Atzeni-etal., Basi di dati, McGrawHill Concetti introdotti Regole di visibilita’ per le interrogazioni nidificate. 15/10/2001 adattato da Atzeni-etal., Basi di dati, McGrawHill