SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2017/2018 1
Sesta parte Interrogazione di una base di dati
Modello E/R STOSTIENE STUDENTE N 1 ESAME 1 EFFETTUA N DOCENTE
Modello Relazionale Studente(matricola, nome, cognome, datanascita, nazionalità, media) Esame(id, nomeesame, crediti, voto, studente, docente) Docente(identificativo, nome, cognome, datanascita, nazionalità, dipartimento)
Studente Matricola Nome Cognome Data Nascita Nazione M00031 Mario Bianchi 12/04/1990 Italia 28 media M00033 Marie Le Pen 11/02/1988 Francia 26,5 Esame ID Nomeesame Crediti Voto Studente Docente 001 Matematica 1 5 26 M00031 DOC0001 002 Fisica 1 9 25 M00033 DOC0002 003 Matematica 1 5 28 M00033 DOC0001 004 Fisica 1 9 30 M00031 DOC0002 Docente Identificativo Nome Cognome Data Nascita Nazione Dipartimento DOC0001 Massimo Della Pietra 12/2/1960 Italia Medicina DOC0002 Giulia Volpe 12/03/1977 Italia Fisica DOC0003 Francesco Migliore 03/03/1980 Italia Informatica
Le query Le operazioni di lettura o scrittura di dati da un DB vengono dette query (trad: interrogazioni ) In particolare ci occuperemo di capire come si possono realizzare le operazioni di: selezione, proiezione e join Ma come si fa a specificare le query?
SQL SQL è un linguaggio che permette di specificare le query SQL = Structured Query Language E stato studiato appositamente per essere facilmente comprensibile appare simile al linguaggio naturale ma NON è linguaggio naturale ha un sintassi formale
La proiezione In SQL l operazione per selezionare alcuni valori da tabelle è detta SELECT La parola FROM indica da quali tabelle vogliamo andare a prendere i risultati SELECT [DISTINCT ] att 1,att 2,..,att n FROM tab 1,tab 2,.., tab n
La proiezione In SQL l operazione per selezionare alcuni valori da tabelle è detta SELECT La parola FROM indica da quali tabelle vogliamo andare a prendere i risultati SELECT nome, cognome FROM studente Effettua la proiezione di studenti sugli attributi nome e cognome
Funzioni di aggregazione Le funzioni di aggregazione SQL restituiscono un singolo valore calcolato dai valori di una Colonna AVG() Il valor medio COUNT() il numero di righe FIRST() il primo valore LAST() l ultimo valore MAX() il valore massimo MIN() il valore minimo SUM() la somma
Funzioni scalari Le funzioni scalar SQL restituiscono un singolo valore basato sul valore di input UCASE() Conversione in maiuscolo LCASE() Conversione in minuscolo MID() Estrae caratteri dal testo LEN() la lunghezza del testo ROUND() arrotonda I numeri decimali NOW() restituisce la data corrente FORMAT() formattazione dei campi
La selezione Si utilizza lo stesso costrutto SELECT FROM della proiezione, ma in aggiunta si specifica una clausola WHERE SELECT [DISTINCT ] att 1, att 2,..,att n FROM tab 1, tab 2,.., tab n [ WHERE condizione ]
La selezione Si utilizza lo stesso costrutto SELECT FROM della proiezione, ma in aggiunta si specifica una clausola WHERE SELECT * FROM esame WHERE crediti > 5 Il simbolo * indica di selezionare tutti gli attributi
Selezione e proiezione La combinazione delle due operazioni si ottiene in modo naturale in SQL: SELECT nomeesame FROM esame WHERE crediti > 5 Effettua la selezione degli esami con più di 5 crediti e poi fa la proiezione sull attributo nomeesame
Selezione e proiezione La combinazione delle due operazioni si ottiene in modo naturale in SQL: SELECT nomeesame FROM esame WHERE crediti > 5 Query1 nomeesame Fisica 1 Fisica 1
Prodotto Il prodotto viene calcolato automaticamente quando vengono selezionate più tabelle con la clausola FROM SELECT nome, cognome, nomeesame FROM studente, esame
Prodotto Il prodotto viene calcolato automaticamente quando vengono selezionate più tabelle con la clausola FROM Query1 nome nomeesame SELECT Mario nome, cognome, Bianchi Matematica 1FROM Marie Le Pen Matematica 1 Mariostudente, esame Bianchi Fisica 1 Marie Le Pen Fisica 1 Mario Bianchi Matematica 1 Marie Le Pen Matematica 1 Mario Bianchi Fisica 1 Marie Le Pen Fisica 1
Il join Selezioniamo alcune righe dopo aver fatto il prodotto: SELECT nome, nomeesame FROM docente, esame WHERE docente.identificativo = esame.docente
Operatori della clausola Where Operatore OR NOT Descrizione Restituisce vero se almeno uno dei due operandi è vero, altrimenti falso Restituisce falso se l operando è vero e viceversa AND Restituisce vero se entrambi gli operandi sono veri, altrimenti falso
Operatori della clausola Where Operatore Descrizione = Uguale <> Diverso da > Maggiore < Minore >= Maggiore uguale <= Minore uguale BETWEEN LIKE IN Tra due valori di un range È come un certo valore E in un insieme di possibili valori
Alcuni esempi SELECT nome, cognome, nomeesame FROM docente, esame WHERE docente.identificativo = esame.docente AND nome = Giulia ; Effettua il join tra docenti ed esami e seleziona le righe in cui l attributo nome contiene il valore Anna ed effettua la proiezioni sui valori nome, cognome e nomeesame
Alcuni esempi SELECT nome, cognome, nomeesame FROM docente, esame WHERE docente.identificativo = esame.docente AND nome = Giulia ; Query1 nome cognome nomeesame Giulia Volpe Fisica 1 Giulia Volpe Fisica 1
Alcuni esempi SELECT nomeesame, voto, dipartimento FROM docente, esame WHERE docente.identificativo = esame.docente AND voto IN (26,18,30) AND dipartimento IN ( Medicina, Economia, Fisica ) ; Query1 nomeesame voto dipartimento Matematica 1 26 Medicina
Alcuni esempi SELECT nome, cognome, nomeesame FROM docente, esame WHERE docente.identificativo = esame.docente AND voto BETWEEN 23 AND 27; Query1 nome cognome nomeesame Massimo Della Pietra Matematica 1 Giulia Volpe Fisica 1
Alcuni esempi SELECT nome, cognome, voto FROM docente, esame WHERE docente.identificativo = esame.docente AND voto >= 26 Query1 nome cognome voto Massimo Della Pietra 26 Massimo Della Pietra 28 Giulia Volpe 29
Ordinamento Ordiniamo le righe dopo aver fatto la selezione sul prodotto: SELECT [DISTINCT ] att 1, att 2,..,att n FROM tab 1, tab 2,.., tab n [ WHERE condizione ] [ ORDER BY att 1 ASC DESC,..,att n ASC DESC]
Ordinamento Ordiniamo le righe dopo aver fatto la selezione sul prodotto: SELECT cognome, nome, dipartimento FROM docente, esame WHERE docente.identificativo = esame.docente ORDER BY cognome DESC
Ordinamento Ordiniamo le righe dopo aver fatto la selezione sul prodotto: Query1 cognome nome dipartimento Volpe Giulia Fisica Volpe Giulia Fisica Della Pietra Massimo Medicina Della Pietra Massimo Medicina
Raggruppamento L'operatore GROUP BY serve a raggruppare i risultati di una SELECT in base ad un campo specificato. L'operatore va usato in congiunzione con una funzione statistica SELECT [DISTINCT ] att 1, att 2,..,att n FROM tab 1, tab 2,.., tab n [ WHERE condizione ] [ GROUP BY att 1, att 2,..,att n ] [ ORDER BY att 1 ASC DESC,..,att n ASC DESC]
Raggruppamento L'operatore GROUP BY serve a raggruppare i risultati di una SELECT in base ad un campo specificato. L'operatore va usato in congiunzione con una funzione statistica SELECT nomeesame, AVG(voto) AS Media FROM esame GROUP BY nomeesame ORDER BY nomeesame
Raggruppamento L'operatore GROUP BY serve a raggruppare i risultati di una SELECT in base ad un campo specificato. L'operatore va usato in congiunzione con una funzione statistica Query1 nomeesame Media Fisica 1 27,5 Matematica 1 27
Raggruppamento HAVING è l'equivalente del WHERE applicata ai gruppi di tuple, quindi, deve far riferimento agli attributi di GROUP BY. SELECT [DISTINCT ] att 1, att 2,..,att n FROM tab 1, tab 2,.., tab n [ WHERE condizione ] [ GROUP BY att 1, att 2,..,att n ] [ HAVING condizione ] [ ORDER BY att 1 ASC DESC,..,att n ASC DESC]
Raggruppamento HAVING è l'equivalente del WHERE applicata ai gruppi di tuple, quindi, deve far riferimento agli attributi di GROUP BY. SELECT nomeesame, AVG(voto) FROM esame GROUP BY nomeesame HAVING AVG(voto) > 27 ORDER BY nomeesame
Raggruppamento HAVING è l'equivalente del WHERE applicata ai gruppi di tuple, quindi, deve far riferimento agli attributi di GROUP BY. Query1 nomeesame Media Fisica 1 27,5
La composizione guidata di query Molti applicativi per gestire database rendono disponibili strumenti di supporto alla creazione di query: oggi ne vedremo alcuni Idea: chi è esperto scrive direttamente in SQL (fa prima) chi non è esperto si lascia aiutare dall applicazione: il risultato è comunque una query in SQL
Query sul modello Relazionale Studente Esame Docente nome, cognome e media di tutti gli studenti matricola, nome e cognome degli studenti nati prima del 1/1/1988 nomeesame e crediti di tutti gli esami Nomeesame, crediti e voto degli esami sostenuti dagli studenti italiani Nomeesame, crediti e voto degli esami sostenuti dagli studenti nati dal 1/1/1988 al 1/1/1990 nome e cognome dei docenti del dipartimento di medicina nome, cognome dei docenti del dipartimento di medicina che hanno effettuato l esame di matematica 1 nome studente, matricola e nome docente degli esami con voto = 28