1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati Lucidi del Corso di Basi di Dati 1, Prof. Carlo Batini, Laurea in Informatica, AA
2 Introduzione Cosè SQL (Structured Query Language)? E un linguaggio che consente di gestire le Basi di Dati relazionali. Esso è contemporaneamente un: Data Definition Language (DDL), cioè consente di creare lo schema della Base di Dati (e delle relazioni) Data Manipulation Language (DML), cioè consente di manipolare le istanze della Base di Dati
3 Introduzione Vedremo come SQL (come DML) permetta di: interrogare la Base di Dati modificare la Base di Dati eseguendo: inserimenti cancellazioni modifiche Nota Bene: in questa e nelle successive slide le parole scritte in maiuscolo (salvo indicazione contraria) sono parole appartenenti al linguaggio
4 Interrogazione di una Base di Dati Listruzione SQL per interrogare una Base di Dati è SELECT. Ci limitiamo alla seguente sintassi: SELECT FROM [WHERE ] dove è la lista degli attributi (separati da virgola) i cui valori devono essere riprodotti come esito dellinterrogazione, è la lista delle tabelle (separate da virgola) coinvolte nellinterrogazione, e è una condizione da soddisfare (vedi nel seguito…). La clausola WHERE è opzionale.
5 Interrogazione di una Base di Dati Come funziona listruzione SELECT? 1.Viene eseguito il prodotto cartesiano delle tabelle specificate in (seguendo lo stesso ordine in cui vengono elencate) 2.Dallinsieme di ennuple del prodotto cartesiano del punto 1, vengono selezionate solo quelle che soddisfano della clausola WHERE (se esiste). Se non esiste la clausola WHERE vengono prese tutte le ennuple del prodotto cartesiano 3.Delle ennuple al punto 2 vengono forniti solo i valori relativi agli attributi specificati in
6 Interrogazione di una Base di Dati Come funziona listruzione SELECT? Nel caso particolare in cui sia composta da ununica tabella R, allora al punto 1 precedente vengono prese tutte le ennuple di R così come sono. NOTA: Gli esempi successivi fanno riferimento alla Base di Dati della prossima slide per cui si suppone di avere già creato lo schema. In particolare sono state definite le chiavi primarie (in rosso) di Studenti e Corsi e le due chiavi esterne (in blu) di Esami. Non si suppongno altri vincoli.
7 Interrogazione di una Base di Dati (esempio) Rossi Neri Verdi Rossi Maria Anna Fabio Luca 25/11/ /04/ /02/ /10/1971 MatricolaCognomeNomeDataNascita 01Analisi 03Chimica 04Chimica Giani Melli Belli CodiceTitoloDocente MatricolaStudenteVotoCodiceCorso Studenti Esami Corsi
8 Interrogazione di una Base di Dati (esempio1) Listruzione: SELECT Cognome, Nome FROM Studenti produce loutput: Rossi Neri Verdi Rossi Maria Anna Fabio Luca
9 Interrogazione di una Base di Dati (esempio2) Listruzione: SELECT Cognome, Nome FROM Studenti WHERE Cognome=Rossi produce loutput: Rossi Maria Luca
10 Interrogazione di una Base di Dati (esempio3) Listruzione: SELECT Cognome, Nome, DataNascita FROM Studenti WHERE Matricola= produce loutput: RossiMaria25/11/1971
11 Interrogazione di una Base di Dati (esempio4) Listruzione: SELECT Cognome, Nome, Voto FROM Studenti, Esami WHERE Matricola= AND Matricola=MatricolaStudente produce loutput: Rossi Maria 28 27
12 Interrogazione di una Base di Dati (esempio5) Listruzione: SELECT Cognome, Nome, Voto, Titolo FROM Studenti, Esami, Corsi WHERE Matricola= AND Matricola=MatricolaStudente AND Codice=CodiceCorso produce loutput: Rossi Maria Analisi Chimica
13 Interrogazione di una Base di Dati (esempio5) Listruzione: SELECT Cognome, Nome, Voto, Titolo FROM Studenti, Esami, Corsi WHERE Matricola= AND Matricola=MatricolaStudente AND Codice=CodiceCorso AND Voto > 27 produce loutput: RossiMaria28Analisi
14 Interrogazione di una Base di Dati (esempio6) Listruzione: SELECT * FROM Studenti è equivalente al comando: SELECT Matricola, Cognome, Nome, DataNascita FROM Studenti * è unabbreviazione per lintera lista di attributi della tabella della clausola FROM.
15 Interrogazione di una Base di Dati Nel caso in cui le tabelle della clausola FROM condividano il nome di qualche attributo, per evitare ambiguità di interpretazione nella, si devono specificare gli attributi preceduti dal nome della tabella a cui appartengano e da un punto. Ad esempio se nella nostra Base di Dati al posto di MatricolaStudente della tabella Esami si mettesse semplicemente Matricola (stesso nome della chiave primaria della tabella Studenti), si potrebbero avere ambiguità in una SELECT che coinvolge entrambe le tabelle ed entrambi gli attributi.
16 Interrogazione di una Base di Dati (esempio7) Listruzione: SELECT Matricola FROM Studenti, Esami è ambiguo in quanto non si capisce se si intende Matricola in Studenti o Matricola in Esami. Ad esempio se si intende Matricola di Studenti, il comando corretto è: SELECT Studenti.Matricola FROM Studenti, Esami
17 Interrogazione di una Base di Dati Nella condizione della clausola WHERE, si può usare un particolare operatore denominato LIKE che permette di selezionare stringhe di caratteri che rispettano un certo modello che contiene: caratteri specifici caratteri jolly _ che denota un arbitrario carattere % che denota una stringa con un numero arbitrario di caratteri
18 Interrogazione di una Base di Dati (esempio8) Listruzione: SELECT Matricola, Cognome, Nome FROM Studenti WHERE Cognome LIKE %er% produce loutput: Neri Verdi Anna Fabio
19 Interrogazione di una Base di Dati (esempio9) Listruzione: SELECT Matricola, Cognome, Nome FROM Studenti WHERE Cognome LIKE %er_ produce loutput: NeriAnna
20 Interrogazione di una Base di Dati Nella condizione della clausola WHERE, si può usare IS NULL per ricercare le ennuple con valori nulli. Ad esempio il comando: SELECT Matricola, Cognome, Nome FROM Studenti WHERE Cognome IS NULL produce un output vuoto poiché nessuna ennupla in Studenti ha valore NULL in corrispondenza di Cognome.
21 Interrogazione di una Base di Dati Il comando SELECT permette luso di una serie di operatori aggregati che vengono valutati solo dopo avere eseguito linterrogazione di base e che servono per: contare le ennuple COUNT trovare il minimo MIN trovare il massimo MAX effettuare la somma SUM effettuare la media AVG
22 Interrogazione di una Base di Dati Loperatore COUNT conta il numero di ennuple di una tabella dopo aver eseguito uninterrogazione di base Ad esempio: SELECT COUNT(*) FROM Studenti WHERE Cognome=Rossi produce il numero di studenti (nella tabella Studenti) il cui cognome è Rossi. Linterrogazione di base si ottiene eliminando loperatore COUNT. Attenzione! COUNT non tiene conto dei valori nulli, cioè elimina, prima di iniziare il conteggio, le ennuple (generate dallinterrogazione di base) composte di soli valori nulli.
23 Interrogazione di una Base di Dati Loperatore MIN trova il minimo valore per un (solo) attributo di una tabella dopo aver eseguito uninterrogazione di base Ad esempio: SELECT MIN(DataNascita) FROM Studenti produce la data di nascita dello studente (tabella Studenti) più anziano. Linterrogazione di base si ottiene eliminando loperatore MIN. Attenzione! MIN non tiene conto dei valori nulli, cioè elimina, prima di trovare il minimo, i valori nulli per lattributo specificato come argomento.
24 Interrogazione di una Base di Dati Loperatore MAX trova il massimo valore per un (solo) attributo di una tabella dopo aver eseguito uninterrogazione di base Ad esempio: SELECT MAX(DataNascita) FROM Studenti produce la data di nascita dello studente (tabella Studenti) più giovane. Linterrogazione di base si ottiene eliminando loperatore MAX. Attenzione! MAX non tiene conto dei valori nulli, cioè elimina, prima di trovare il massimo, i valori nulli per lattributo specificato come argomento.
25 Interrogazione di una Base di Dati Loperatore SUM effettua la somma dei valori relativi a un (solo) attributo di una tabella dopo aver eseguito uninterrogazione di base Ad esempio: SELECT SUM(Voto) FROM Esami produce la somma di tutti i voti presenti nella tabella Esami. Linterrogazione di base si ottiene eliminando loperatore SUM. Attenzione! SUM non tiene conto dei valori nulli, cioè elimina, prima di trovare la somma, i valori nulli per lattributo specificato come argomento.
26 Interrogazione di una Base di Dati Loperatore AVG effettua la media dei valori relativi a un (solo) attributo di una tabella dopo aver eseguito uninterrogazione di base Ad esempio: SELECT AVG(Voto) FROM Studenti, Esami WHERE Matricola= AND Matricola=MatricolaStudente AND Codice=CodiceCorso produce la media dei voti dello studente con numero di matricola pari a Attenzione! SUM non tiene conto dei valori nulli, cioè elimina, prima di trovare la somma, i valori nulli per lattributo specificato come argomento.
27 Aggiornamento di una Base di Dati Le operazioni di aggiornamento di una Base di Dati sono: inserimento INSERT cancellazione DELETE modifica UPDATE
28 Aggiornamento di una Base di Dati Loperazione di inserimento di una ennupla in una tabella della Base di Dati viene effettuata tramite il comando INSERT: INSERT INTO ( ) VALUES( ) dove è il nome della tabella in cui si vuole effettuare linserimento, è la lista degli attributi della tabella per cui si vuole specificare un valore, è la lista che specifica i valori degli attributi di nello stesso ordine di.
29 Aggiornamento di una Base di Dati Se viene omessa, allora si fa riferimento a tutti gli attributi della tabella nello stesso ordine in cui sono stati elencati nella CREATE TABLE. Attenzione! Per gli attributi non specificati in viene inserito il valore di DEFAULT se questo è stato specificato al momento di creazione della tabella, altrimenti viene inserito il valore NULL solo però se questo non viola un eventuale vincolo di NOT NULL specificato per lattributo stesso (in caso contrario loperazione viene rifiutata).
30 Aggiornamento di una Base di Dati (esempio1) Listruzione: INSERT INTO Studenti (Matricola, Cognome, Nome) VALUES(23456, Bianchi, Stefano) inserisce in Studenti la ennupla (23456, Bianchi, Stefano, NULL) in quanto il valore per DataNascita non è stato specificato
31 Aggiornamento di una Base di Dati Loperazione di cancellazione di ennuple da una tabella della Base di Dati viene effettuata tramite il comando DELETE: DELETE FROM [WHERE ] dove è il nome della tabella da cui si vogliono cancellare le ennuple che rispettano la condizione specificata da (se esiste la clausola WHERE che è opzionale). Se la clausola WHERE viene omessa, allora tutte le ennuple della tabella vengono cancellate.
32 Aggiornamento di una Base di Dati (esempio2) Listruzione: DELETE FROM Studenti WHERE Cognome=Rossi cancella dalla tabella Studenti tutti gli studenti che hanno cognome Rossi.
33 Aggiornamento di una Base di Dati Loperazione di aggiornamento di ennuple di una tabella della Base di Dati viene effettuata tramite il comando UPDATE: UPDATE SET =, …, = [WHERE ] dove è il nome della tabella in cui si vogliono aggiornare le ennuple che rispettano la condizione specificata da (se esiste la clausola WHERE che è opzionale).
34 Aggiornamento di una Base di Dati Se la clausola WHERE viene omessa, allora tutte le ennuple della tabella vengono aggiornate. La clausola SET specifica gli attributi che devono essere aggiornati. In altre parole si prendono le ennuple che rispettano (se esiste, altrimenti si prendono tutte) e si aggiorna ogni valore di al valore specificato da, che può essere: DEFAULT NULL unespressione e altro… (che non vediamo…)
35 Aggiornamento di una Base di Dati (esempio3) Listruzione: UPDATE Studenti SET DataNascita=NULL WHERE Cognome=Rossi aggiorna al valore NULL la data di nascita degli studenti che hanno cognome Rossi.
36 Aggiornamento di una Base di Dati (esempio4) Listruzione: UPDATE Studenti SET DataNascita=DEFAULT WHERE Cognome=Rossi aggiorna al valore di default (eventualmente specificato per lattributo DataNascita nellistruzione CREATE TABLE) la data di nascita degli studenti che hanno cognome Rossi.
37 Aggiornamento di una Base di Dati (esempio5) Listruzione: UPDATE Esami SET Voto=18 WHERE Voto > 18 AND Voto <= 20 aggiorna a 18 tutti i voti degli esami con voto compreso tra 18 e 20.
38 Aggiornamento di una Base di Dati (esempio6) Listruzione: UPDATE Esami SET Voto=Voto-1 WHERE Voto > 28 decrementa di 1 i voti di tutti gli esami con voto superiore a 28.