Elaborazione Automatica dei Dati. SQL come Query Language. Enrico Cavalli. Anno Accademico 2012-2013. Il linguaggio SQL



Documenti analoghi
Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

Operazioni sui database

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Istruzioni DML di SQL

SQL - Funzioni di gruppo

Il linguaggio SQL: query innestate

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

CONCETTO DI ANNIDAMENTO

Le Basi di Dati. Le Basi di Dati

MODULO 5 ACCESS Basi di dati. Lezione 4

Algebra Relazionale e Calcolo Relazionale. L. Vigliano

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. INFORMATICA GENERALE Prof. Alberto Postiglione

Linguaggi per basi di dati

4 SQL : Interrogazioni nidificate

Capitolo 13. Interrogare una base di dati

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Interrogazioni complesse. SQL avanzato 1

DBMS (Data Base Management System)

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

Il linguaggio SQL: viste e tabelle derivate

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Dispensa di database Access

Introduzione all Algebra Relazionale

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

SQL/OLAP. Estensioni OLAP in SQL

Elementi di Algebra Relazionale

OSSIF WEB. Manuale query builder

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

MAX, SUM, AVG, COUNT)

Gli operatori relazionali

Corso di Laboratorio di Basi di Dati

Le query. Lezione 6 a cura di Maria Novella Mosciatti

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Introduzione ai database relazionali

Data management a.a Il linguaggio SQL

Progettazione di un Database

Il linguaggio SQL. ing. Alfredo Cozzi 1

SQL (STRUCTURED QUERY LANGUAGE)

Basi di dati 9 febbraio 2010 Compito A

PROGRAMMA DI CLASSE 5AI

Introduzione al corso

SQL come linguaggio di interrogazione. Basi di dati. Interrogazioni SQL. Interpretazione algebrica delle query SQL

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

SQL IL LINGUAGGIO DI INTERROGAZIONE

Basi di Dati e Sistemi Informativi. Algebra Relazionale

MODELLO RELAZIONALE. Introduzione

Structured Query Language parte 1

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Lezione V. Aula Multimediale - sabato 29/03/2008

DATABASE RELAZIONALI

Il Modello Relazionale

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Interrogazioni nidificate, commenti

Sistemi per la gestione di database: MySQL ( )

Informatica per le discipline umanistiche 2 lezione 10

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Modello Relazionale. Modello Relazionale. Relazioni - Prodotto Cartesiano. Relazione: tre accezioni. Es. Dati gli insiemi

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

ALGEBRA RELAZIONALE RIEPILOGO

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

Database. Si ringrazia Marco Bertini per le slides

Modello Relazionale. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto san giovanni

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Microsoft Access Maschere

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Basi Di Dati, 09/12/2003

Introduzione. Elenco telefonico Conti correnti Catalogo libri di una biblioteca Orario dei treni aerei

MODULO 5 DATA BASE PROGRAMMA. Progettazione rapida introduzione alla progettazione di DB

TEORIA sulle BASI DI DATI

Definizione di domini

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Cultura Tecnologica di Progetto

SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Fa riferimento ad una famiglia di linguaggi dichiarativi, basati sul calcolo dei predicati del primo ordine

User Tools: DataBase Manager

Archivi e Basi di Dati

GERARCHIE RICORSIVE - SQL SERVER 2008

Per visualizzare e immettere i dati in una tabella è possibile utilizzare le maschere;

Volumi di riferimento

Uso di base delle funzioni in Microsoft Excel

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Prova Scritta di Basi di Dati

Tipi MULTISET: accesso

Esercitazione di riepilogo sulle Query MySQL Giugno 2011 Classe VB Informatica

Il linguaggio SQL: le basi

(anno accademico )

ITI Galilei Salerno Corso Database ed SQL

Uso delle basi di dati. Informazione e dato. Cos è un database. Tabelle. Esempi di database

Organizzazione degli archivi

Transcript:

Elaborazione Automatica dei Dati SQL come Query Language Enrico Cavalli Anno Accademico 2012-2013 Il linguaggio SQL SQL = Structured Query Language Diverse versioni del linguaggio gli standard ANSI: SQL, SQL2, SQL3 le versioni proposte dai produttori di DBMS SQL è un linguaggio che permette di: definire uno schema relazionale - DDL modificare la base di dati - DML costruire interrogazioni - QL Le interrogazioni che si costruiscono con SQL sono un estensione di quelle dell algebra relazionale Esaminiamo SQL come linguaggio per interrogare il database Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 2

Le interrogazioni dell algebra relazionale con SQL Interrogazioni in SQL (1) Considerando la base di dati definita dallo schema: Film ( Titolo, Anno, Lunghezza, acolori, NomeStudio ) Attori ( Titolo, Anno, NomeAttore ) Costruiamo le interrogazioni per ottenere: Titolo ed Anno dei film della Fox lunghi almeno 100 minuti SELECT Titolo, Anno FROM Film WHERE NomeStudio = Fox AND Lunghezza >= 100; Tutti gli attributi dei film della Fox lunghi più di 100 minuti SELECT * FROM Film WHERE NomeStudio = Fox AND Lunghezza > 100; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 4

Interrogazioni in SQL (2) Film ( Titolo, Anno, Lunghezza, acolori, NomeStudio ) Attori ( Titolo, Anno, NomeAttore ) L elenco degli attori del film: Moulin Rouge del 2002 SELECT NomeAttore FROM Attori WHERE Titolo = Moulin Rouge AND Anno = 2002; L elenco degli studi che hanno prodotto i film con Nicole Kidman SELECT NomeStudio FROM Film, Attori WHERE Film.Titolo = Attori.Titolo AND Film.Anno = Attori.Anno AND NomeAttore = Nicole Kidman ; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 5 Interrogazioni in SQL (3) Film ( Titolo, Anno, Lunghezza, acolori, NomeStudio ) Attori ( Titolo, Anno, NomeAttore ) I protagonisti dei film che durano almeno 100 minuti SELECT NomeAttore FROM Film, Attori WHERE Film.Titolo = Attori.Titolo AND Film.Anno = Attori.Anno AND Lunghezza >= 100; I protagonisti e la durata in ore dei film che durano più di 100 minuti SELECT NomeAttore, Lunghezza/ AS Durata FROM Film AS F, Attori AS A WHERE F.Titolo = A.Titolo AND F.Anno = A.Anno AND Lunghezza > 100; Estensioni rispetto all algebra relazionale Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 6

Condizioni di ricerca (1) Film ( Titolo, Anno, Lunghezza, acolori, NomeStudio ) Attori ( Titolo, Anno, NomeAttore ) I film di durata compresa tra 90 e 120 minuti SELECT Titolo, Anno FROM Film WHERE Lunghezza Between 90 AND 120; Equivale all interrogazione: SELECT Titolo, Anno FROM Film WHERE Lunghezza>=90 AND Lunghezza<=120; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 7 Condizioni di ricerca (2) Film ( Titolo, Anno, Lunghezza, acolori, NomeStudio ) Attori ( Titolo, Anno, NomeAttore ) I film dove recitano gli attori X o Y o Z SELECT Titolo, Anno FROM Attori WHERE NomeAttore IN ( X, Y, Z ); Equivale all interrogazione: SELECT Titotlo, Anno FROM Attori WHERE NomeAttore = X OR NomeAttore = Y OR NomeAttore = Z ; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 8

Confronto di Stringhe (1) Matricola Matricola Nome Nome Età Età 101 M.Rossi 34 40 101 M.Rossi 34 40 103 M.Bianchi 23 35 103 M.Bianchi 23 35 104 L.Neri 38 61 104 L.Neri 38 61 105 105 N.Bini N.Bini 44 44 38 38 M.Celli M.Celli 49 49 231 S.Bisi 50 231 S.Bisi 50 252 N.Bini 44 70 252 N.Bini 44 70 301 S.Rossi 34 70 301 S.Rossi 34 70 375 M.Rossi 50 65 375 M.Rossi 50 65 Elenco degli impiegati il cui cognome inizia per B o per C SELECT * FROM Impiegati WHERE Nome LIKE _.B%' OR Nome LIKE _.C%' ; Matricola Matricola Nome Nome Età Età 103 103 M.Bianchi M.Bianchi 23 23 35 35 105 105 N.Bini N.Bini 44 44 38 38 M.Celli M.Celli 49 49 231 231 S.Bisi S.Bisi 50 50 252 252 N.Bini N.Bini 44 44 70 70 Si è fatto uso dei caratteri Jolly % ( 0 o più caratteri arbitrari ) _ ( 1 carattere arbitrario ) In molti SQL sono accettati? e * al posto di _ e % Estensione rispetto all algebra relazionale Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 9 Confronto di Stringhe (2) L operatore LIKE fa uso di due caratteri speciali: _ (? ) al posto di un carattere arbitrario % ( * ) al posto di n caratteri arbitrari ( n >= 0 ) Il carattere (apice) in una stringa è indicato con (due apici) Una stringa può spesso essere delimitata con (doppio apice) I caratteri speciali: _ % in una stringa sono indicati con le sequenze di escape, precisando il carattere di escape con ESCAPE Nome LIKE %&_% ESCAPE & Nome deve contenere _ Valore LIKE % % ESCAPE Valore deve terminare con % Titolo LIKE % s% Titolo deve contenere un genitivo sassone Valore LIKE _% % ESCAPE Valore deve terminare con % preceduto da almeno un carattere Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 10

Ordinamenti Elenco degli impiegati il cui cognome inizia per B o per C, ordinato per valori decrescenti di Età: SELECT * FROM Impiegati WHERE Nome LIKE _.B%' OR Nome LIKE _.C% ORDER BY Età DESC; Matricola Matricola Nome Nome Età Età 231 231 S.Bisi S.Bisi 50 50 M.Celli M.Celli 49 49 252 252 N.Bini N.Bini 44 44 70 70 105 105 N.Bini N.Bini 44 44 38 38 103 103 M.Bianchi M.Bianchi 23 23 35 35 ORDER BY Colonna [ ASC DESC ] Estensione rispetto all algebra relazionale Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 11 Comprendere l SQL (1) Film ( Titolo, Anno, Lunghezza, acolori, NomeStudio ) Attori ( Titolo, Anno, NomeAttore ) SELECT Titolo, Anno, NomeStudio FROM Film; Elenco di tutti i film con titolo anno e nome dello studio SELECT Titolo FROM Film WHERE Anno > 1970 AND NOT acolori; I film in bianco e nero girati dopo il 1970 SELECT Titolo FROM Film WHERE ( Anno > 1970 AND Lunghezza < 90 ) AND NomeStudio = MGM ; I film della MGM girati dopo il 1970 di durata minore di 90 minuti Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 12

Comprendere l SQL (2) Film ( Titolo, Anno, Lunghezza, acolori, NomeStudio ) Attori ( Titolo, Anno, NomeAttore ) SELECT Titolo, NomeStudio, Lunghezza FROM Film WHERE Anno > 1970 AND Titolo LIKE %love% ORDER BY NomeStudio, Lunghezza DESC; Elenco dei film girati dopo il 1970 e che contengono love nel titolo ordinato per valori crescenti di NomeStudio e, a parità di nome studio, per valori decrescenti di durata SELECT Titolo FROM Film AS F, Attori AS A WHERE A.Titolo = F.Titolo AND A.Anno = F.Anno AND NomeAttore LIKE %cruis% ; I film recitati da attori nel cui nome compare la sequenza cruis Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 13 Il comando Select (1) SELECT Quali colonne mostrare, ridenominazioni e calcoli FROM Da quali tabelle si prelevano i dati WHERE ORDER BY Le condizioni che devono essere soddisfatte da una riga per essere scelta con il comando SELECT Ordinamenti Le clausole obbligatorie Sono: SELECT e FROM Deve essere rispettato l ordine: SELECT FROM WHERE ORDER BY Il comando SELECT termina con ; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 14

Il comando Select (2) SELECT Proiezioni Ridenominazioni Calcoli FROM WHERE Prodotti Cartesiani Join Selezioni Condizioni di Join Il Join di tabelle è ottenuto con il Theta Join: si costruisce il prodotto cartesiano delle tabelle elencandole nella clausola FROM e si specifica nella clausola WHERE quali righe scegliere Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 15 Interrogazioni in SQL(1) Date le tabelle: Impiegati ( Matricola, Nome, Età, ) Supervisione ( Capo, Impiegato ) Matricola Nome Età Matricola Nome Età 101 M.Rossi 34 40 101 M.Rossi 34 40 103 M.Bianchi 23 35 103 M.Bianchi 23 35 104 L.Neri 38 61 104 L.Neri 38 61 105 N.Bini 44 38 105 N.Bini 44 38 M.Celli 49 M.Celli 49 231 S.Bisi 50 231 S.Bisi 50 252 N.Bini 44 70 252 N.Bini 44 70 301 S.Rossi 34 70 301 S.Rossi 34 70 375 M.Rossi 50 65 375 M.Rossi 50 65 Capo Impiegato Capo Impiegato 101 101 103 103 104 104 231 105 231 105 301 301 301 231 301 231 375 252 375 252 1. Nome, Matricola, Età dei dipendenti con stipendio > 40 2. Matricola dei capi degli impiegati che hanno > 40 3. Nome e dei capi degli impiegati che hanno > 40 4. L elenco degli impiegati che guadagnano più del proprio capo, mostrando Matricola, Nome e di ogni impiegato e del capo Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 16

Interrogazioni in SQL(2) Impiegati ( Matricola, Nome, Età, ) Supervisione ( Capo, Impiegato ) Nome, Matricola, Età degli impiegati con stipendio > 40 SELECT Nome, Matricola, Età FROM Impiegati WHERE > 40; Matricola dei capi degli impiegati con stipendio > 40 SELECT Supervisione.Capo FROM Impiegati, Supervisione WHERE Impiegati. > 40 AND Impiegati.Matricola=Supervisione.Impiegato; Come si è arrivati a questa Select? Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 17 Interrogazioni in SQL(3) Costruendo la query per passi: SELECT S.*, I.* FROM Supervisione AS S, Impiegati AS I WHERE S.Impiegato = I.Matricola; SELECT S.*, I.* FROM Supervisione AS S, Impiegati AS I WHERE S.Impiegato = I.Matricola AND I. > 40; Capo Capo Impiegato Impiegato Matricola Matricola Nome Nome Età Età 101 101 101 M.Rossi 101 M.Rossi 34 34 40 40 103 103 103 M.Bianchi 103 M.Bianchi 23 23 35 35 104 104 104 L.Neri 104 L.Neri 38 38 61 61 231 231 105 105 105 N.Bini 105 N.Bini 44 44 38 38 301 301 M.Celli M.Celli 49 49 301 301 231 231 231 S.Bisi 231 S.Bisi 50 50 375 375 252 252 252 N.Bini 252 N.Bini 44 44 70 70 Capo Capo Impiegato Impiegato Matricola Matricola Nome Nome Età Età 104 104 104 L.Neri 104 L.Neri 38 38 61 61 301 301 M.Celli M.Celli 49 49 301 301 231 231 231 S.Bisi 231 S.Bisi 50 50 375 375 252 252 252 N.Bini 252 N.Bini 44 44 70 70 Basta ora visualizzare la matricola del capo Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 18

Interrogazioni in SQL(4) Nome e stipendio dei capi degli impiegati che hanno stipendio > 40 Estendere la tabella con i dati di Capo Capo Capo Impiegato Impiegato 101 101 103 103 104 104 231 231 105 105 301 301 301 231 301 231 375 252 375 252 Estendere la tabella con i dati di Impiegato C.Matricola C.Matricola C.Nome C.Nome C.Età C. Capo Impiegato I.Matricola C.Età C. Capo Impiegato I.Matricola I.Nome I.Nome I.Età I.Età I. I. M.Celli M.Celli 49 49 101 101 101 M.Rossi 101 M.Rossi 34 34 40 40 M.Celli 49 103 103 M.Bianchi 23 35 M.Celli 49 103 103 M.Bianchi 23 35 M.Celli 49 104 104 L.Neri 38 61 M.Celli 49 104 104 L.Neri 38 61 231 S.Bisi 231 S.Bisi 50 50 231 231 105 105 105 N.Bini 105 N.Bini 44 44 38 38 301 S.Rossi 301 S.Rossi 34 34 70 70 301 301 M.Celli M.Celli 49 49 301 S.Rossi 34 70 301 231 231 S.Bisi 50 301 S.Rossi 34 70 301 231 231 S.Bisi 50 375 M.Rossi 50 65 375 252 252 N.Bini 44 70 375 M.Rossi 50 65 375 252 252 N.Bini 44 70 SELECT * FROM Impiegati AS C, Supervisione AS S, Impiegati AS I WHERE C.Matricola=S.Capo AND S.Impiegato=I.Matricola; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 19 Interrogazioni in SQL(5) SELECT C.Nome, C. FROM Impiegati AS C, Supervisione AS S, Impiegati AS I WHERE C.Matricola = S.Capo AND S.Impiegato = I.Matricola AND I. > 40; I DBMS commerciali, per ragioni di efficienza, non controllano se ci sono righe duplicate,.. Nome M.Celli S.Rossi 70 S.Rossi 70 M.Rossi 65 SELECT DISTINCT C.Nome, C. FROM Impiegati AS C, Supervisione AS S, Impiegati AS I WHERE C.Matricola = S.Capo AND S.Impiegato = I.Matricola AND I. > 40; Nome M.Celli S.Rossi 70 M.Rossi 65 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 20

Interrogazioni in SQL(6) Impiegati che guadagnano più del proprio capo... SELECT C.Matricola,C.Nome,C.,I.Matricola,I.Nome, I. FROM Impiegati AS C, Supervisione AS S, Impiegati AS I WHERE C.Matricola = S.Capo AND S.Impiegato = I.Matricola AND I. > C.; C.Matricola C.Matricola C.Nome C.Nome C. C. I.Matricola I.Matricola I.Nome I.Nome I. I. M.Celli M.Celli 104 L.Neri 104 L.Neri 61 61 375 M.Rossi 375 M.Rossi 65 65 252 N.Bini 252 N.Bini 70 70 Volendo esprimere gli stipendi in euro invece che in milioni di lire.. SELECT.. INT(C.*1000/1.93627) AS StipCapo.. INT(I.*1000/1.93627) FROM... C.Matricola C.Matricola C.Nome C.Nome StipCapo StipCapo I.Matricola I.Matricola I.Nome I.Nome Expr1005 Expr1005 M.Celli M.Celli 30987 30987 104 104 L.Neri L.Neri 31503 31503 375 375 M.Rossi M.Rossi 33569 33569 252 252 N.Bini N.Bini 36151 36151 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 21 Prodotto Cartesiano, Join Interni, Join Esterni, Operazioni insiemistiche

Prodotto Cartesiano Paternità Padre Adamo Adamo Abramo Abramo Figlio Caino Abele Isacco Ismaele Maternità Madre Eva Eva Sara Agar Figlio Caino Set Isacco Ismaele Le tabelle che compaiono nella clausola FROM vengono composte come PRODOTTO CARTESIANO, combinando tutte le righe della prima tabella con tutte le righe della seconda SELECT * FROM Paternità, Maternità; Padre Padre Paternità.Figlio Paternità.Figlio Madre Madre Maternità.Figlio Maternità.Figlio Adamo Adamo Caino Caino Eva Eva Caino Caino Adamo Adamo Abele Abele Eva Eva Caino Caino Abramo Abramo Isacco Isacco Eva Eva Caino Caino Abramo Abramo Ismaele Ismaele Eva Eva Caino Caino Adamo Adamo Caino Caino Eva Eva Set Set Adamo Adamo Abele Abele Eva Eva Set Set Abramo Abramo Isacco Isacco Eva Eva Set Set Abramo Abramo Ismaele Ismaele Eva Eva Set Set Adamo Adamo Caino Caino Sara Sara Isacco Isacco Adamo Adamo Abele Abele Sara Sara Isacco Isacco Abramo Abramo Isacco Isacco Sara Sara Isacco Isacco Abramo Abramo Ismaele Ismaele Sara Sara Isacco Isacco Adamo Adamo Caino Caino Agar Agar Ismaele Ismaele Adamo Adamo Abele Abele Agar Agar Ismaele Ismaele Abramo Abramo Isacco Isacco Agar Agar Ismaele Ismaele Abramo Abramo Ismaele Ismaele Agar Agar Ismaele Ismaele Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 23 Theta Join Paternità Padre Figlio Adamo Caino Adamo Abele Abramo Isacco Abramo Ismaele Maternità Madre Figlio Eva Caino Eva Set Sara Isacco Agar Ismaele SELECT Padre, P.Figlio, Madre FROM Paternità P, Maternità M WHERE P.Figlio = M.Figlio; Il THETA JOIN si ottiene dal Prodotto Cartesiano scrivendo la condizione di Join nella clausola WHERE L esempio mostra un EQUI JOIN E necessaria una proiezione per eliminare la colonna duplicata e ottenere un JOIN NATURALE Nel Join si perde l associazione tra Adamo e Abele e tra Eva e Set Padre P.Figlio Madre Adamo Caino Eva Abramo Isacco Sara Abramo Ismaele Agar Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 24

Join Interni: SQL-2 (1) THETA JOIN SELECT ElencoColonne FROM R [INNER] JOIN S ON CondizioniDiJoin WHERE CondizioniDiSelezione; I figli di Adamo e di Eva SELECT Padre, P.Figlio AS Figli, Madre FROM Paternità P INNER JOIN Maternità M ON P.Figlio = M.Figlio WHERE Madre = Eva AND Padre = Adamo ; Padre Figli Madre Adamo Caino Eva Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 25 Join Interni: SQL-2 (2) EQUI JOIN SELECT ElencoColonne FROM R [INNER] JOIN S USING(Col1, Col2,..) WHERE CondizioniDiSelezione; Elenco, con i genitori, dei figli dei quali sono noti entrambi i genitori SELECT Padre, P.Figlio, Madre FROM Paternità P JOIN Maternità M USING (Figlio); Padre P.Figlio Madre Adamo Caino Eva Abramo Isacco Sara Abramo Ismaele Agar Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 26

Join Interni: SQL-2 (3) NATURAL JOIN SELECT ElencoColonne FROM R NATURAL JOIN S WHERE CondizioniDiSelezione; Elenco, con i genitori, dei figli dei quali sono noti entrambi i genitori SELECT * FROM Paternità NATURAL JOIN Maternità; Padre Figlio Madre Adamo Caino Eva Abramo Isacco Sara Abramo Ismaele Agar Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 27 Join Esterni (1) SELECT ElencoColonne LEFT FROM R FULL [OUTER] JOIN S ON CondizioniDiJoin RIGHT WHERE CondizioniDiSelezione; FULL JOIN: nel Join devono comparire tutte le righe di R e di S; le righe senza corrispondenti sono completate con valori nulli LEFT JOIN nel Join compaiono tutte le righe di R... RIGHT JOIN nel Join compaiono tutte le righe di S... I Join esterni permettono di estrarre informazioni che i Join interni non riescono a catturare In molti SQL mancano il FULL JOIN e il RIGHT JOIN Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 28

Join Esterni (2) Elenco, con i genitori, dei figli di Adamo (anche se non si conosce la madre): SELECT Padre, P.Figlio, Madre FROM Paternità P LEFT JOIN Maternità M ON P.Figlio = M.Figlio WHERE Padre = Adamo ; Padre P.Figlio Madre Adamo Caino Eva Adamo Abele Elenco, con i genitori, dei figli di Eva (anche se non si conosce il padre): SELECT Padre, M.Figlio, Madre FROM Paternità P RIGHT JOIN Maternità M ON P.Figlio = M.Figlio WHERE Madre = Eva ; Padre M.Figlio Madre Adamo Caino Eva Set Eva Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 29 Join Esterni (3) Tutti i figli di Adamo / Eva ( anche se non è noto l altro genitore ): SELECT * FROM Paternità P FULL JOIN Maternità M ON P.Figlio = M.Figlio WHERE P.Padre = Adamo OR M.Madre = Eva ; In MySQL, e altri DBMS, il FULL JOIN si costruisce con l unione di tabelle: ( SELECT Padre, P.Figlio AS Figli, Madre FROM Paternità P LEFT JOIN Maternità M ON P.Figlio = M.Figlio WHERE Padre = 'Adamo') UNION Adamo Abele ( SELECT Padre, M.Figlio AS Figli, MadreSet FROM Paternità P RIGHT JOIN Maternità M ON P.Figlio = M.Figlio WHERE Madre = 'Eva'); Padre Figli Madre Adamo Caino Eva Eva Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 30

Valori Nulli (1) I Join Esterni sono sorgenti di valori nulli... Anagrafica ( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti ( Dipart, Indirizzo, Città ) Nome Nome Cognome Cognome Dipart Dipart Ufficio Ufficio Città Città Carlo Carlo Bianchi Bianchi Produzione Produzione 20 20 36 36 Torino Torino Carlo Carlo Rossi Rossi Direzione Direzione 80 80 Milano Milano Franco Franco Neri Neri Distribuzione Distribuzione 45 45 Napoli Napoli Giuseppe Giuseppe Verdi Verdi Marketing Marketing 20 20 40 40 Roma Roma Lorenzo Lorenzo Lanzi Lanzi Direzione Direzione 7 7 73 73 Genova Dipart Genova Marco Marco Franco Franco Produzione Dipart Indirizzo Produzione 20 20 46 46 Roma Indirizzo Città Città Roma Mario Mario Rossi Rossi Amministrazione Amministrazione Amministrazione Amministrazione 10 Via 10 Via 45Tito 45 Milano Tito Livio, Milano Livio, 27 27 Milano Milano Paola Paola Borroni Borroni Amministrazione Direzione Amministrazione Direzione 75 Via 75 Via 40Tito 40 Venezia Tito Livio, Venezia Livio, 27 27 Milano Milano Distribuzione Distribuzione Via Via Segre, Segre, 9 9 Roma Roma Produzione Produzione Piazza Piazza Lavater, Lavater, 3 3 Torino Torino Ricerca Ricerca Via Via Morone, Morone, 6 6 Milano Milano Chi sono i dipendenti che lavorano in dipartimenti inesistenti? Quali dipartimenti non hanno dipendenti? Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 31 Valori nulli (2) I valori nulli si controllano con il predicato: IS NULL -- --------------------------------------------------- -- Dipendenti in dipartimenti inesistenti -- --------------------------------------------------- SELECT Nome, Cognome, A.Dipart FROM Anagrafica A LEFT JOIN Dipartimenti D Using (Dipart) WHERE D.Dipart IS NULL; -- ------------------------------------------------------ -- Dipartimenti senza dipendenti -- ------------------------------------------------------ SELECT D.Dipart FROM Anagrafica A RIGHT JOIN Dipartimenti D Using (Dipart) WHERE Cognome IS NULL; -- WHERE Cognome = NULL ERRORE Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 32

Valori nulli (3) L assenza di valore nulli si controlla con il predicato: IS NOT NULL -- ------------------------------------------------------ -- Dipendenti per i quali è noto l ufficio dove lavorano -- ------------------------------------------------------ SELECT Nome, Cognome, Dipart, Ufficio FROM Anagrafica WHERE Ufficio IS NOT NULL; -- ------------------------------------------------------ -- Dipendenti per i quali è noto l ufficio dove lavorano -- ------------------------------------------------------ SELECT Nome, Cognome, Dipart, Ufficio FROM Anagrafica WHERE Ufficio <> NULL; Errore Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 33 Valori nulli (4) Esercizi Elencare i figli di Adamo dei quali non si conosce la madre partendo dall elenco visualizzato nella diapositiva dal titolo: Join Esterni (2) e sfruttando i predicati IS NULL oppure IS NOT NULL Elencare i figli di Eva dei quali non si conosce il padre partendo dall elenco visualizzato nella diapositiva dal titolo: Join Esterni (2) e sfruttando i predicati IS NULL oppure IS NOT NULL Elencare i dipendenti in Anagrafica (vedi schema nella diapositiva Valori nulli (1)) dei quali si conosce lo stipendio Elencare i dipartimenti (vedi schema nella diapositiva Valori nulli (1)) che mancano dell indirizzo Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 34

Operazioni Insiemistiche (1) Una strategia per elencare i figli di Eva dei quali non è noto il padre porta a considerare in un primo tempo tutti i figli di Eva SELECT Figlio FROM Maternità WHERE Madre='Eva'; Figlio Caino Set Quindi i figli di Eva dei quali è noto il padre Padre Figlio Madre Adamo Caino Eva SELECT Padre, Figlio, Madre FROM Paternità NATURAL JOIN Maternità WHERE Madre='Eva'; Unione Intersezione Differenza? Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 35 Operazioni Insiemistiche (2) EXCEPT costruisce la differenza tra tabelle ( SELECT Figlio FROM Maternità Figlio WHERE Madre = Eva ) Set EXCEPT ( SELECT Figlio FROM Paternità NATURAL JOIN Maternità WHERE Madre ='Eva ); UNION INTERSECT Spesso Assente - EXCEPT Spesso Assente Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 36

Esercizi Riassuntivi (1) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo, Città ) 1. Individuare lo stipendio degli impiegati di cognome Rossi 2. Estrarre tutte le informazioni sugli impiegati di cognome Rossi 3. Restituire lo stipendio mensile ( espresso in euro e non in milioni di lire ) degli impiegati di cognome Bianchi 4. Per tutti gli impiegati estrarre Nome, Cognome e Città dove lavorano 5. Estrarre Nome e Cognome degli impiegati che lavorano nell ufficio 20 del dipartimento Amministrazione 6. Estrarre i nomi propri degli impiegati di Cognome Rossi che lavorano nel dipartimento Amministrazione o nel dipartimento Produzione 7. Estrarre tutte le informazioni sugli impiegati di cognome con una o in seconda posizione e terminano per i Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 37 Esercizi Riassuntivi (2) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo, Città ) 8. Estrarre Nome, Cognome e nome del dipartimento degli impiegati che lavorano in città diverse da quelle di residenza 9. Elencare tutti i dati dei dipendenti che lavorano in dipartimenti che hanno sede a Roma 10.Elencare i dipartimenti dove lavorano i dipendenti che risiedono a MiIano 11.Estrarre Nome, Cognome e Retribuzione degli impiegati che lavorano a Milano 12.Elencare i dipartimenti che hanno sede in città dove non risiede alcun dipendente 13.Elencare i dipendenti dell amministrazione dei quali non è noto lo stipendio 14.Elencare i dipendenti che lavorano a Torino dei quali non è nota la città di residenza Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 38

Esercizi Riassuntivi (3) Dipendenti( Codice, Cognome,, Manager ) La tabella Dipendenti contiene, per ogni dipendente, il codice che lo identifica, il cognome, lo stipendio e il codice del dirigente da cui dipendono 15.Con un comando SELECT realizzare una tabella con tre colonne: nella prima compare il codice del dipendente, nella seconda il suo cognome e nell ultima il cognome del manager da cui dipendono 16.Elencare i dipendenti che non dipendono da alcun manager 17.Elencare i dipendenti che hanno come manager Leoni 18.Elencare i dipendenti che hanno retribuzione maggiore od uguale a quella del rispettivo manager 19.Elencare i dipendenti con Cognome, e differenza tra il proprio stipendio e quello del manager da cui dipendono Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 39 Funzioni di Aggregazione e Raggruppamenti

Funzioni di Aggregazione (1) Costituiscono un estensione dell algebra relazionale Sintetizzano i valori di un intera colonna in un solo valore Possono comparire nelle sole clausole SELECT o HAVING Aggregazione: producono un solo valore dall elenco di valori che appaiono in una colonna: SUM: la somma dei valori in colonna AVG: la media dei valori in colonna MIN: il minimo dei valori in colonna MAX: il massimo dei valori in colonna COUNT: il numero di valori che compaiono in colonna Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 41 Funzioni di Aggregazione (2) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo, Città ) Somma degli stipendi dei dipendenti che lavorano a Milano SELECT SUM() AS SommaStipendi FROM Anagrafica JOIN Dipartimenti USING (Dipart) WHERE Dipartimenti.Città = 'Milano'; Viene eseguita come se: SommaStipendi SELECT FROM Anagrafica JOIN Dipartimenti USING (Dipart) WHERE Dipartimenti.Città = 'Milano'; 278 45 40 80 73 40 Alla colonna viene applicato SUM SommaStipendi 278 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 42

Funzioni di Aggregazione (3) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo, Città ) Da quante città provengono i dipendenti SELECT COUNT(Città) AS NumeroCittà FROM Anagrafica; NumeroCittà 8 SELECT COUNT(DISTINCT Città) AS NumeroCittà FROM Anagrafica; NumeroCittà 6 COUNT (Colonna) Ignora i valori nulli nella colonna Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 43 Funzioni di Aggregazione (4) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo,Città ) massimo e numero di dipendenti della sede di Roma SELECT MAX() AS Max, COUNT() AS Dipendenti FROM Anagrafica JOIN Dipartimenti USING (Dipart) WHERE Dipartimenti.Città = 'Roma'; Max Dipendenti 45 1 Esercizi Estrarre stipendio massimo, minimo e medio fra quelli di tutti gli impiegati Estrarre lo stipendio massimo fra i dipendenti che lavorano in amministrazione Quanti dipendenti lavorano a Torino? Quanti dipendenti lavorano in una città differente da quella di residenza? Chi è il dipendente della direzione con lo stipendio massimo? (Attenzione!!) Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 44

Raggruppamenti (1) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo,Città ) Si presenta, spesso, il problema di aggregare i dati non sull intera colonna ma su particolari sottoinsiemi di una colonna -- --------------------------------------- -- Media degli stipendi nei dipartimenti -- --------------------------------------- SELECT Dipart AS Dipartimento, AVG() AS MediaStipendi FROM Anagrafica GROUP BY Dipart; Dipartimento MediaStipendi Amministrazione 41,66666667 Direzione 76,5 Distribuzione 45 Produzione 41 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 45 Raggruppamenti (2) -- 1 SELECT Dipart, FROM Anagrafica Dipartimento Produzione 36 Direzione 80 Distribuzione 45 Amministrazione 40 Direzione 73 Produzione 46 Amministrazione 45 Amministrazione 40 -- 2 SELECT Dipart, FROM Anagrafica GROUP BY Dipart -- 3 -- Dopo il raggruppamento la -- funzione di aggregazione -- viene applicata separata- -- mente ai diversi insiemi Dipartimento Amministrazione 40 Amministrazione 40 Amministrazione 45 Direzione 73 Direzione 80 Distribuzione 45 Produzione 46 Produzione 36 Dipartimento MediaStipendi Amministrazione 41,66666667 Direzione 76,5 Distribuzione 45 Produzione 41 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 46

Raggruppamenti (3) -- ------------------------------------------------------ -- L applicazione della funzione di aggregazione ai -- singoli raggruppamenti, passo 3, avviene come se la -- sua valutazione avvenisse nel seguente modo -- ------------------------------------------------------ -- -- 3 -- SELECT A.Dipart,( SELECT, AVG() FROM Anagrafica B WHERE A.Dipart=B.Dipart ) FROM Anagrafica A GROUP BY Dipart; Dipartimento Amministrazione 40 Amministrazione 40 Amministrazione 45 Direzione 73 Direzione 80 Distribuzione 45 Produzione 46 Produzione 36 Dipartimento MediaStipendi Amministrazione 41,66666667 Direzione 76,5 Distribuzione 45 Produzione 41 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 47 Raggruppamenti (4) Film ( Titolo,Anno,Lunghezza,aColori,NomeStudio,Produttore ) Produttori ( CodProd, NomeProduttore, Indirizzo ) Elencare i produttori con il numero di film prodotti da ciascuno di essi SELECT * FROM Film, Produttori WHERE Produttore = CodProd; SELECT NomeProduttore FROM Film, Produttori WHERE Produttore = CodProd GROUP BY NomeProduttore; SELECT NomeProduttore, COUNT(*) FROM Film, Produttori WHERE Produttore = CodProd GROUP BY NomeProduttore; Nella clausola SELECT possono comparire solo campi che compaiono anche nella clausola GROUP BY e funzioni di aggregazione Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 48

Predicati sui gruppi: Having (1) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo,Città ) -- ---------------------------------------------------- -- I dipartimenti che spendono più di 100 in stipendi -- ---------------------------------------------------- SELECT Dipart, SUM() AS SommaStipendi FROM Anagrafica GROUP BY Dipart HAVING SUM() > 100; Dipartimento Dipartimento Amministrazione Amministrazione 40 40 Amministrazione Amministrazione 40 40 Amministrazione Amministrazione 45 45 Direzione Direzione 73 73 Direzione Direzione 80 80 Distribuzione Distribuzione 45 45 Produzione Produzione 46 46 Produzione Produzione 36 36 Dopo il raggruppamento viene valutato il predicato della clausola HAVING Dipart Dipart SommaStipendi SommaStipendi Amministrazione Amministrazione 125 125 Direzione Direzione 153 153 Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 49 Predicati sui gruppi: HAVING (2) Film ( Titolo,Anno,Lunghezza,aColori,NomeStudio,Produttore ) Produttori ( CodProd, NomeProduttore, Indirizzo ) Numero di film prodotti dai produttori che hanno cominciato a produrre film prima del 19 SELECT NomeProduttore, COUNT(*) FROM Film, Produttori WHERE Produttore = CodProd GROUP BY NomeProduttore; SELECT NomeProduttore, COUNT(*) FROM Film, Produttori WHERE Produttore = CodProd GROUP BY NomeProduttore HAVING Min(anno) < 19; HAVING stabilisce condizioni sui raggruppamenti generati dalla clausola GROUP BY Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 50

Ordine delle clausole Le clausole di un comando SELECT sono: SELECT FROM WHERE GROUP BY HAVING ORDER BY SELECT, FROM sono le uniche clausole obbligatorie Le diverse clausole, se presenti, devono rispettare l ordine dell elenco Il motore SQL le elabora nel seguente ordine: FROM WHERE GROUP BY HAVING SELECT ORDER BY Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 51 Esercizi (1) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo,Città ) Estrarre i dipartimenti dove non lavorano impiegati di cognome Rossi Determinare lo stipendio massimo del dipartimento Amministrazione massimo, minimo e medio dei dipendenti che lavorano a Roma Dipartimento dell impiegato che guadagna lo stipendio massimo? (Usare ORDER BY) Nome e Cognome dell impiegato che guadagna lo stipendio minimo (Usare ORDER BY) Elenco dei dipartimenti con il numero di dipendenti che vi lavorano Da quante città differenti provengono i dipendenti del dipartimento Amministrazione In quanti dipartimenti lavorano i dipendenti che risiedono a Roma Lo stipendio massimo medio e minimo dei dipendenti del dipartimento Marketing Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 52

Esercizi (2) PC( Produttore, Modello ) Caratteristiche( Modello, Velocità, Ram, CD, HD, Prezzo ) Trovare la velocità media dei PC Trovare la velocità media dei PC che costano più di 1500 Euro Trovare il prezzo medio dei PC prodotti da HP Trovare il produttore che fornisce almeno tre modelli di PC Trovare per ogni produttore il prezzo del PC più costoso Trovare la velocità massima dei PC di prezzo inferiore a 1000 Euro Elencare i PC di velocità massima di prezzo inferiore a 1000 euro Elencare i produttori che hanno PC con HD di almeno 80 GB e prezzo medio compreso tra 500 e 900 euro Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 53 Esercizi (3) Studenti ( Matricola, Nome, Cognome, Indirizzo ) Corsi ( CodiceCorso, NomeCorso, CodiceDocente ) Docenti ( CodiceDocente, Nome, Cognome ) Esami ( CodiceCorso, Matricola, Data, Voto ) Elenco degli esami registrati nel corso del 2005 con: Nome, Cognome, Matricola dello studente, nome del corso, Nome e Cognome del docente. L elenco deve essere suddiviso per docente. Quanti esami sono stati registrati dal docente: Enrico Cavalli nel corso del 2004? Estrarre il numero degli esami sostenuti dallo studente con matricola 25374. Estrarre la media dei voti dello studente con matricola 25374. Elenco dei corsi per i quali non sono stati superati esami Elenco dei docenti che non hanno registrato esami nel corso del 2003 Elenco degli studenti che hanno sostenuto più di 3 esami nel corso del 2005 Elenco dei laureandi (studenti con almeno 28 esami superati) Numero dei corsi insegnati dal docente Enrico Cavalli Docenti che sono titolari di almeno 2 corsi Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 54

Interrogazioni Nidificate Interrogazioni Nidificate (1) Impiegati( Matricola, Nome, Età, ) Supervisione( Capo, Impiegato ) -- ----------------------------- -- Il nome del capo di M.Celli -- ----------------------------- SELECT Nome FROM Impiegati Si può usare un WHERE Matricola = comando SELECT al posto ( SELECT Capo di una costante in una FROM Supervisione clausola WHERE WHERE Impiegato = ( SELECT Matricola FROM Impiegati WHERE Nome = M.Celli ) ); Matricola Matricola Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 56

Interrogazioni Nidificate (2) Impiegati( Matricola, Nome, Età, ) Supervisione( Capo, Impiegato ) -- ----------------------------- -- Il nome del capo di M.Celli -- ----------------------------- SELECT Nome FROM Impiegati WHERE Matricola = ( SELECT Capo FROM Supervisione WHERE Impiegato = ); Capo 310 SELECT Nome FROM Impiegati WHERE Matricola = 310; S.Rossi Nome La matricola di Celli, estratta da Impiegati, è stata usata in Supervisione per trovare la matricola del capo di Celli. Noto questo valore è possibile recuperare il nome del capo di Celli dalla tabella Impiegati Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 57 Interrogazioni Nidificate (3) Impiegati( Matricola, Nome, Età, ) Supervisione( Capo, Impiegato ) -- ----------------------------------------------------- -- Il nome del capo di M.Celli: approccio tradizionale -- ----------------------------------------------------- SELECT C.Nome FROM Impiegati AS C, Supervisione AS S, Impiegati AS I WHERE C.Matricola = S.Capo AND S.Impiegato = I.Matricola AND I.Nome = M.Celli ; Le interrogazioni nidificate sono un modo concettualmente diverso di costruire le interrogazioni Forniscono un metodo alternativo a quello dell algebra relazionale Possono essere utilizzate per semplificare dal punto di vista concettuale la progettazione di interrogazioni complesse In molti casi sono insostituibili... Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 58

Interrogazioni Nidificate (4) Nome Cognome Dipart Ufficio Città Carlo Bianchi Produzione 20 36 Torino Carlo Rossi Direzione 80 Milano Franco Neri Distribuzione 45 Napoli Giuseppe Verdi Marketing 20 40 Roma Lorenzo Lanzi Direzione 7 73 Genova Marco Franco Produzione 20 46 Roma Mario Rossi Amministrazione 10 45 Milano Paola Borroni Amministrazione 75 40 Venezia Chi è l impiegato con lo stipendio più elevato? SELECT MAX() FROM Dipendenti; Max() 80 SELECT Nome, Cognome FROM Dipendenti WHERE = 80; Nome Cognome Carlo Rossi SELECT Nome, Cognome FROM Dipendenti WHERE = ( SELECT MAX() FROM Dipendenti ); Nome Cognome Carlo Rossi Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 59 Interrogazioni Nidificate (5) Chi sono gli impiegati con lo stipendio superiore alla media? SELECT Nome, Cognome FROM Dipendenti WHERE > ( SELECT AVG() FROM Dipendenti ); Gli impiegati con lo stipendio superiore alla media e di quanto la superano SELECT Nome,Cognome, - ( SELECT AVG() FROM Dipendenti ) FROM Dipendenti WHERE > ( SELECT AVG() FROM Dipendenti ); Si osservi che le risposte alle precedenti richieste possono essere ottenute con una serie di interrogazioni o con una sola query nidificata. Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo

Interrogazioni Nidificate (6) Impiegati( Matricola, Nome, Età, ) Supervisione( Capo, Impiegato ) Elencare i capi con tutti i dati SELECT DISTINCT Capo FROM Supervisione; Capo 231 301 375 SELECT * FROM Impiegati WHERE Matricola IN (,231,301,375); SELECT * FROM Impiegati WHERE Matricola IN ( SELECT DISTINCT Capo FROM Supervisione ); Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 61 Interrogazioni Nidificate (7) Impiegati( Matricola, Nome, Età, ) Supervisione( Capo, Impiegato ) Elencare i dipendenti che non sono capi SELECT * FROM Impiegati WHERE Matricola NOT IN ( SELECT DISTINCT Capo FROM Supervisione ); Un elenco di valori prodotto da un comando SELECT può essere inserito in una clausola WHERE per essere esaminato con opportuni operatori: IN, ALL, ANY,.. Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 62

Operatori con le sottointerrogazioni (1) Operatori per esaminare un elenco prodotto da una SELECT: s IN Elenco x Elenco x = s s NOT IN Elenco x Elenco x s s > ALL Elenco x Elenco s > x (<, <=, <>,.. ) NOT s > ALL Elenco ( x Elenco s > x ) s > ANY Elenco x Elenco s > x (<, <=, <>,.. ) NOT s > ANY R ( x Elenco s > x ) EXIST R R NOT EXIST R R = Nella maggior parte dei casi s indica uno scalare, in alcuni casi s può essere una tupla, mentre R rappresenta una tabella, ANY sinonimo di SOME Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 63 Operatori con le sottointerrogazioni (2) Gli operatori introdotti non sono indipendenti s IN Elenco permette di costruire l intersezione di tabelle s NOT IN Elenco permette di costruire la differenza di tabelle -- ---------------------------------------------------------- -- I figli di Adamo ed Eva -- ---------------------------------------------------------- SELECT Figlio FROM Maternità WHERE Madre = Eva AND Figlio IN ( SELECT Figlio FROM Paternità WHERE Padre = Adamo ); -- ---------------------------------------------------------- -- I figli di Adamo ma non di Eva -- ---------------------------------------------------------- SELECT Figlio FROM Paternità WHERE Padre = Adamo AND Figlio NOT IN ( SELECT Figlio FROM Maternità WHERE Madre = Eva ); Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 64

Operatori con le sottointerrogazioni (3) Anagrafica( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo,Città ) -- --------------------------------------------- -- Elenco dei dipartimenti che hanno impiegati -- --------------------------------------------- SELECT Dipart, Indirizzo, Città FROM Dipartimenti D WHERE EXIST ( SELECT * FROM Anagrafica A WHERE A.Dipart = D.Dipart ); -- ------------------------------------------------ -- Dipendenti della Ricerca con stipendio maggiore -- di quello di tutti i dipendenti del Marketing -- ------------------------------------------------ SELECT Nome, Cognome FROM Anagrafica WHERE Dipart = Ricerca AND > ALL ( SELECT FROM Anagrafica WHERE Dipart = Marketing ); Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 65 Esempi (1) Database sulle navi. Le navi sono costruite in serie: le navi della stessa serie sono tutte uguali e costituiscono una classe. Il campo Tipo di una certa classe è un carattere ( I, C, P, S, ecc ), che indica il tipo di nave ( Incrociatore, Corazzata, Portaerei, Sommergibile,.. ) Classi (Classe, Tipo, Paese, Stazza) Navi (Nome, Classe, DataVaro) 1. Elencare le nazioni che posseggono sia sommergibili che portaerei Risolto come intersezione Approccio tradizionale: congiungendo tabelle 2. Elencare le classi con una sola nave come membro della classe Senza usare GROUP BY Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 66

Esempi (2) Classi( Classe, Tipo, Paese, Stazza ) Navi( Nome, Classe, DataVaro ) -- ---------------------------------------------------- -- Nazioni che hanno sia sommergibili che portaerei -- Intersezione realizzata con IN -- ---------------------------------------------------- SELECT DISTINCT Paese FROM Classi JOIN Navi USING (Classe) WHERE Tipo = S AND Paese IN ( SELECT DISTINCT Paese FROM Classi JOIN Navi USING (Classe) WHERE Tipo = P ); -- ---------------------------------------------------- -- Ipotesi: se c è una classe c è almeno una nave -- ---------------------------------------------------- SELECT DISTINCT C1.Paese FROM Classi C1 JOIN Classi C2 USING (Paese) WHERE C1.Tipo = S AND C2.Tipo = P ; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 67 Esempi (3) Classi( Classe, Tipo, Paese, Stazza ) Navi( Nome, Classe, DataVaro ) -- ----------------------------------------------------- -- Le classi con almeno una nave -- ----------------------------------------------------- Esercizi SELECT DISTINCT N1.Classe concettualmente FROM Navi N1 JOIN Navi N2 USING (Classe) difficili WHERE N1.Nome = N2.Nome; -- ------------------------------------------------------ -- Le classi con più di una nave -- ------------------------------------------------------ SELECT DISTINCT N1.Classe FROM Navi N1 JOIN Navi N2 USING (Classe) WHERE N1.Nome <> N2.Nome; -- ------------------------------------------------------ -- Le classi con una sola nave: differenza delle -- precedenti tabelle usando NOT IN -- ------------------------------------------------------ Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 68

Sottointerrogazioni Complesse (1) Nome Cognome Dipart Ufficio Città Nome Cognome Dipart Ufficio Città Carlo Bianchi Produzione 20 36 Torino Carlo Bianchi Produzione 20 36 Torino Carlo Rossi Direzione 80 Milano Carlo Rossi Direzione 80 Milano Franco Neri Distribuzione 45 Napoli Franco Neri Distribuzione 45 Napoli Giuseppe Verdi Marketing 20 40 Roma Giuseppe Verdi Marketing 20 40 Roma Lorenzo Lanzi Direzione 7 73 Genova Lorenzo Lanzi Direzione 7 73 Genova Marco Franco Produzione 20 46 Roma Marco Franco Produzione 20 46 Roma Mario Rossi Amministrazione 10 45 Milano Mario Rossi Amministrazione 10 45 Milano Paola Borroni Amministrazione 75 40 Venezia Paola Borroni Amministrazione 75 40 Venezia -- ------------------------------------------------------ -- Dipendenti con lo stesso nome di addetti alla Produzione -- ------------------------------------------------------ SELECT * FROM Dipendenti WHERE Nome = ANY ( SELECT DISTINCT Nome Nome FROM Dipendenti Carlo WHERE Dipart = 'Produzione'); Marco Nome Cognome Dipart Ufficio Città Carlo Bianchi Produzione 20 36 Torino Carlo Rossi Direzione 80 Milano Marco Franco Produzione 20 46 Roma Così non va bene! Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 69 Sottointerrogazioni Complesse (2) Soluzione: i nomi prodotti dalla query interna non devono comprendere quelli (uguali) ma che provengono dalla medesima riga della query esterna -- --------------------------------------------------- -- Query Esterna -- --------------------------------------------------- SELECT * FROM Dipendenti AS A WHERE Nome = ANY ( -- ----------------------------------------- -- Query interna -- ----------------------------------------- SELECT Nome FROM Dipendenti AS B WHERE Dipart = 'Produzione AND A.Cognome <> B.Cognome ); Nome Nome Cognome Cognome Dipart Dipart Ufficio Ufficio Città Città Carlo Carlo Rossi Rossi Direzione Direzione 80 80 Milano Milano Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 70

Sottointerrogazioni Complesse (3) In generale: Per ogni riga della query esterna viene valutata la query interna e, successivamente, il predicato della query esterna. L operazione è ripetuta per tutte le righe della query esterna. Si osservi che si ottiene lo stesso risultato con l interrogazione: SELECT A.* FROM Dipendenti A, Dipendenti B WHERE A.Nome = B.Nome AND A.Cognome <> B.Cognome AND B.Dipart = 'Produzione ; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 71 Esercizi (1) Classi( Classe, Tipo, Paese, Stazza ) Navi( Nome, Classe, DataVaro ) 1. Il trattato di Washington del 1921 proibì di costruire navi di stazza superiore alle 35000 tonnellate. Si elenchino le navi che violarono il trattato 2. Elencare gli incrociatori italiani varati dopo il 1945 3. Elencare le corazzate di stazza superiore a quella di almeno una portaerei 4. Elencare le portaerei di stazza superiore a quella di qualsiasi corazzata 5. Elencare le nazioni che posseggono sommergibili ma non hanno né portaerei nè corazzate 6. Elencare le classi con almeno due navi come membro della classe 7. Elencare le navi con il medesimo nome 8. Elencare la nave (o le navi) italiane di stazza massima 9. Elencare le navi di stazza maggiore della nave italiana più grande Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 72

Esercizi (2) Studenti( Matricola, Nome, Cognome, Indirizzo ) Corsi( Corso, Docente, Descrizione ) Esami( Matricola, Corso, Data, Voto ) 10. Chi si è beccato, anche immeritatamente, il voto più alto nel corso di codice X 11. Elencare gli studenti che hanno sostenuto due volte l esame di Y 12. Elencare gli studenti che hanno superato esami con Moriggia o Cavalli 13. Elencare gli esami che non hanno voti superiori a 26 14. Elencare gli studenti che hanno il voto minimo nel corso Z 15. Elencare i corsi per i quali nessuno studente ha sostenuto esami 16. Elencare i corsi (con Docente e Descrizione) nei quali ci sono studenti che hanno superato il relativo esame con votazione pari a 30 17. Chi sono gli studenti che hanno sostento esami nell ultimo giorno fra quelli registrati 18. Il corso che ha il numero massimo di esami registrati (Suggerimento: creare una tabella di servizio con corso e numero esami registrati e interrogare quella) Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 73 Viste Logiche

Viste Logiche (1) Le VISTE LOGICHE sono tabelle virtuali create dinamicamente con interrogazioni su tabelle reali o altre viste logiche. Le viste logiche sono interrogabili e, sotto opportune condizioni, modificabili: le modifiche apportate alle viste logiche si riflettono sui dati delle tabelle da cui le viste sono derivate Impiegati( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo, Città ) -- ------------------------------------------------- -- Ammontare degli stipendi per ogni dipartimento -- ------------------------------------------------- CREATE VIEW TotStipendi(Dipartimento,Stipendi) AS SELECT Dipart, SUM() FROM Impiegati GROUP BY Dipart; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 75 Viste Logiche (2) Impiegati( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo, Città ) -- ---------------------------------------------------- -- Altri Formati: nome colonne per ridenominazione -- ---------------------------------------------------- Preferito CREATE VIEW TotStipendi AS SELECT Dipart AS Dipartimento, SUM() AS Stipendi FROM Impiegati GROUP BY Dipart; -- ---------------------------------------------------- -- Le colonne prendono il nome da quelle selezionate -- ---------------------------------------------------- CREATE VIEW TotStipendi AS SELECT Dipart, SUM() FROM Impiegati GROUP BY Dipart; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 76

Viste Logiche (3) Le viste logiche sono tabelle virtuali Le viste logiche sono tabelle virtuali generate da una query Le viste logiche sono filtri sui dati delle tabelle reali Una vista logica esiste nel DB solo come definizione Le viste logiche materializzate sono viste logiche sulle quali è stato costruito un indice unico clusterizzato, dette anche viste indicizzate (SQL Server) Le viste logiche possono essere interrogate come ogni tabella reale Le viste logiche permettono di inserire, modificare e cancellare dati, a condizione che non ci siano aggregazioni, calcoli, ecc. Le viste logiche possono essere alla base di altre viste logiche Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 77 Viste Logiche (4) Le viste logiche sono utilizzate per: Mostrare all utente i soli dati di cui ha bisogno Impedire la visione di dati riservati Personalizzare i dati secondo le esigenze dell utente Controllare l immissione dei dati ( vedi: WITH CHECK OPTION ) Semplificare concettualmente la progettazione delle interrogazioni Realizzare interrogazioni impossibili da costruire diversamente Mantenere la compatibilità con le vecchie tabelle dopo che ne è stato modificato lo schema Per importare ed esportare dati verso altre applicazioni Per combinare dati distribuiti su diversi server Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 78

Viste Logiche (5) Le VISTE LOGICHE sono utili per: Risolvere problemi impossibili da risolvere diversamente Semplificare concettualmente la progettazione delle interrogazioni -- ------------------------------------------------------ -- Il dipartimento che spende di più in stipendi -- ------------------------------------------------------ SELECT Dipartimento FROM TotStipendi WHERE Stipendi = ( SELECT Max(Stipendi) FROM TotStipendi ); Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 79 Viste Logiche (6) Impiegati( Nome, Cognome, Dipart, Ufficio,, Città ) Dipartimenti( Dipart, Indirizzo, Città ) -- ----------------------------------------------------------------- -- Numero medio di uffici per dipartimento -- ----------------------------------------------------------------- CREATE VIEW Uffici AS SELECT Dipart AS Dipartimento, COUNT(DISTINCT Ufficio) AS NumUffici FROM Impiegati GROUP BY Dipart; -- Interrogazione della vista logica SELECT AVG(NumUffici) FROM Uffici; -- ------------------------------------------------------------- -- Elenco dei dipartimenti con il nome dell impiegato -- che ha lo stipendio più elevato nel dipartimento -- ------------------------------------------------------------- CREATE VIEW MaxStipendi AS SELECT Dipart AS Dipartimento, MAX() AS Max FROM Impiegati GROUP BY Dipart; Elaborazione automatica dei dati - Enrico Cavalli - Università di Bergamo 80