concetti fondamentali () - Corso di Laurea in Informatica
by user
Comments
Transcript
concetti fondamentali () - Corso di Laurea in Informatica
Basi di Dati SQL-92 Concetti Fondamentali versione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca – [email protected] – Università della Basilicata SQL-92 >> Sommario Concetti Fondamentali Introduzione Creazione ed eliminazione di bd Creazione ed eliminazione di tabelle Inserimenti di ennuple G. Mecca - [email protected] - Basi di Dati Interrogazioni clausola SELECT clausola FROM clausola WHERE clausola ORDER BY metodo di scrittura Cancellazioni Aggiornamenti 2 SQL-92 >> Concetti Fondamentali >> Introduzione Introduzione SQL (“Structured Query Language”) linguaggio per l’interazione con il DBMS tutte le operazioni vengono specificate in SQL DDL (“Data Definition Language”) creazione degli oggetti dello schema DCL (“Data Control Language”) controllo degli utenti e delle autorizzazioni DML (“Data Manipulation Language”) manipolazione dell’istanza della base di dati (interrogazioni e aggiornamenti) G. Mecca - [email protected] - Basi di Dati 3 SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard Prime implementazioni IBM System/R 1979 (SEQUEL) Primi prodotti commerciali IBM SQL/DS, Oracle 1981 SQL-86 prima versione dello standard, basata sul dialetto IBM G. Mecca - [email protected] - Basi di Dati 4 SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard SQL-89 (SQL-1) vincoli di integrità livello1 e livello2 SQL-92 (SQL-2) entry intermediate full G. Mecca - [email protected] - Basi di Dati SQL-92, full SQL-92, intermediate SQL-92, entry SQL-89, livello 2 SQL-89, livello 1 5 SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard Standard collegati SQL/CLI “Call Level Interface” (ODBC), 1995 SQL/PSM “Persistent Storage Modules”, 1997 SQL/OLB “Object Language Bindings”, 1998 G. Mecca - [email protected] - Basi di Dati 6 SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard SQL:1999 (SQL-3) estensioni “objectrelational” core: tutto SQL-92 entry, (quasi) tutto SQL-92 intermediate, parte di SQL-92 full packages Attualmente: SQL-92, full SQL-92, intermediate SQL-92, entry SQL-89, livello 2 SQL-89, livello 1 SQL:1999, core lavori su SQL:200x G. Mecca - [email protected] - Basi di Dati 7 SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard Implementazioni dello standard gli standard hanno in alcuni casi inseguito la tecnologia di mercato Corrispondenza imperfetta non esiste nessuna implementazione completa in commercio di SQL-92 full molti DBMS offrono funzionalità “proprietarie” e non standard (es: parte di SQL:1999) problema di portabilità delle applicazioni G. Mecca - [email protected] - Basi di Dati 8 SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard tipico DBMS commerciale Tipico DBMS sul mercato oggi essenzialmente SQL92 intermediate limitate funzionalità di SQL-92 full parte di SQL:1999 SQL-92, full SQL-92, intermediate SQL-92, entry SQL-89, livello 2 SQL-89, livello 1 In questo corso ci concentriamo su SQL-92, intermediate G. Mecca - [email protected] - Basi di Dati SQL:1999, core 9 SQL-92 >> Concetti Fondamentali >> Introduzione Le Istruzioni Fondamentali DDL creazione della base di dati CREATE DATABASE creazione delle tabelle CREATE TABLE DML inserimento delle ennuple INSERT INTO G. Mecca - [email protected] - Basi di Dati interrogazioni SELECT eliminazione delle ennuple DELETE modifica della ennuple UPDATE 10 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di BD Creazione ed Eliminazione di BD Istruzioni del DDL Sintassi CREATE DATABASE <nome>; DROP DATABASE <nome>; Esempio CREATE DATABASE universita; DROP DATABASE universita; G. Mecca - [email protected] - Basi di Dati 11 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di BD Creazione ed Eliminazione di BD Semantica CREATE DATABASE crea una nuova base di dati vuota l’utente deve essere autorizzato l’utente diventa il proprietario della bd DROP DATABASE elimina una base di dati esistente (anche non vuota) l’utente deve essere autorizzato G. Mecca - [email protected] - Basi di Dati 12 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle Istruzioni del DDL CREATE TABLE DROP TABLE Sintassi CREATE TABLE <nome> (<schema>); DROP TABLE <nome>; G. Mecca - [email protected] - Basi di Dati 13 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle Esempio: la tabella Professori CREATE TABLE Professori ( cod char(4) PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, qualifica char(15), facolta char(10) ); DROP TABLE Professori; G. Mecca - [email protected] - Basi di Dati 14 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle Esempio: la tabella Esami CREATE TABLE Esami ( studente integer REFERENCES Studenti(matr) ON DELETE cascade ON UPDATE cascade, corso char(3) REFERENCES Corsi(cod), voto integer, lode bool, CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), PRIMARY KEY (studente, corso)); G. Mecca - [email protected] - Basi di Dati 15 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle <schema> una o più definizioni di attributo zero o più definizioni di vincoli di tabella Definizione di attributo <nomeattributo> <tipo> [<vincoli di colonna>] Definizioni di vincoli di tabella normalmente vincoli relativi a più attributi G. Mecca - [email protected] - Basi di Dati 16 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle <nomeattributo> identificatore <tipo> INT, INTEGER REAL, FLOAT DECIMAL(lung,dec) DOUBLE PRECISION CHAR(n), CHARACTER(n) VARCHAR(n) G. Mecca - [email protected] - Basi di Dati LONG VARCHAR, TEXT BOOLEAN, BOOL DATE TIME TIMESTAMP BINARY(n), BIT(n) VARBINARY(n), VARBIT(n) LONG VARBINARY, BLOB 17 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle Vincoli di colonna PRIMARY KEY UNIQUE NOT NULL REFERENCES <chiave della tabella dest.> [ON update CASCADE] [ON delete CASCADE] CHECK (<espressione>) G. Mecca - [email protected] - Basi di Dati 18 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle Vincoli di tabella (su più attributi) PRIMARY KEY (<lista attributi>) UNIQUE (<lista attributi>) FOREIGN KEY (<lista attributi>) REFERENCES <chiave esterna> [ON update CASCADE] [ON delete CASCADE] CHECK (<espressione>) G. Mecca - [email protected] - Basi di Dati 19 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle Creazione ed Eliminazione di Tabelle Semantica CREATE TABLE crea una nuova tabella vuota secondo lo schema specificato l’utente deve essere autorizzato l’utente diventa il proprietario della tabella attenzione ai vincoli di riferimento DROP TABLE elimina una tabella esistente l’utente deve essere autorizzato G. Mecca - [email protected] - Basi di Dati 20 SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle CREATE TABLE Professori ( CREATE TABLE Tutorato ( cod char(4) PRIMARY KEY, studente integer cognome varchar(20) NOT NULL, REFERENCES Studenti(matr), nome varchar(20) NOT NULL, tutor integer qualifica char(15), REFERENCES Studenti(matr), facolta char(10) ); PRIMARY KEY (studente,tutor)); CREATE TABLE Esami ( CREATE TABLE Studenti ( studente integer matr integer PRIMARY KEY, REFERENCES Studenti(matr) cognome varchar(20) NOT NULL, ON DELETE cascade nome varchar(20) NOT NULL, ON UPDATE cascade, ciclo char(20), corso char(3) anno integer, REFERENCES Corsi(cod), relatore char(4) voto integer, REFERENCES Professori(cod) lode bool, ); CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), CREATE TABLE Corsi ( PRIMARY KEY (studente, corso)); cod char(3) PRIMARY KEY, titolo varchar(20) NOT NULL, CREATE TABLE Numeri ( ciclo char(20), professore char(4) docente char(4) REFERENCES Professori(cod), REFERENCES Professori(cod) numero char(9), ); PRIMARY KEY (professore,numero)); G. Mecca - [email protected] - Basi di Dati 21 SQL-92 >> Concetti Fondamentali >> Inserimenti Inserimenti Istruzione del DML INSERT Sintassi INSERT INTO <tabella> VALUES (<valori>); Semantica inserimento della ennupla nella tabella corrispondenza ordinata tra valori e attributi (notazione posizionale) G. Mecca - [email protected] - Basi di Dati 22 SQL-92 >> Concetti Fondamentali >> Inserimenti Inserimenti Esempi: INSERT INTO Professori VALUES (‘FT’, ‘Totti’, ‘Francesco’, ‘ordinario’, ‘Ingegneria’); INSERT INTO Studenti VALUES (111, ‘Rossi’, ‘Mario’, ‘laurea tr.’, 3, null); INSERT INTO Corsi VALUES (‘PR1’, ‘Programmazione 1’, ‘laurea tr.’, ‘FT’); G. Mecca - [email protected] - Basi di Dati 23 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Istruzione del DML SELECT sintassi concreta per specificare operatori dell’algebra Filosofia parzialmente dichiarativa si specificano gli operatori da applicare, non l’ordine in cui devono essere applicati l’ottimizzatore sceglie la strategia ottima G. Mecca - [email protected] - Basi di Dati 24 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Tre “clausole” principali (nucleo) SELECT, FROM, WHERE SELECT proiezioni, ridenominazioni, elimin. duplicati FROM tabelle, join, prodotti cartesiani, alias WHERE selezioni G. Mecca - [email protected] - Basi di Dati 25 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Studenti della laurea triennale di anni successivi al primo” Risultato = s ciclo=‘laurea tr.’ AND anno>1 (Studenti) SELECT * FROM Studenti WHERE ciclo=‘laurea tr.’ AND anno>1; G. Mecca - [email protected] - Basi di Dati 26 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Matricola e cognome degli studenti che hanno sostenuto l’esame di informatica teorica” Risultato = p matricola, cognome ( s titolo=‘Inform. t.’ ( Studenti matr=studente Esami cod=corso Corsi )) SELECT matricola, cognome FROM Studenti JOIN Esami ON matr=studente JOIN Corsi ON cod=corso WHERE titolo=‘Inform. t.’; G. Mecca - [email protected] - Basi di Dati 27 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Per sistematizzare partiamo dalla forma standard dell’algebra relazionale (nella versione più generale) mostriamo come le clausole della SELECT si possono mettere in corrispondenza con gli operatori della forma standard questo ci suggerirà anche un metodo per scrivere le interrogazioni SQL G. Mecca - [email protected] - Basi di Dati 28 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Forma standard dell’algebra una o più sottointerrogazioni correlate da operatori insiemistici Sottointerrogazioni strategia a: prodotti cartesiani tra le tabelle (con eventuali alias) strategia b: join tra le tabelle (con eventuali alias) >> G. Mecca - [email protected] - Basi di Dati 29 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Sottointerrogazioni (Continua) selezioni proiezioni (con funzioni aggregative) eliminazione di duplicati (DISTINCT) ridenominazioni ordinamenti finali (ORDER BY) G. Mecca - [email protected] - Basi di Dati 30 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Sottointerrogazione ORDER BY r DISTINCT p s TABELLE, con X oppure ed ev. ALIAS U oppure ∩ oppure – Sottointerrogazione G. Mecca - [email protected] - Basi di Dati 31 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Interrogazioni SQL una o più sottointerrogazioni con eventuali operatori insiemistici Per ogni sottointerrogazione SELECT: proiezioni, ridenominazioni, distinct FROM: prodotti cartesiani o join, alias [WHERE]: selezioni (opzionale) [ORDER BY]: ordinamenti (opzionale) G. Mecca - [email protected] - Basi di Dati 32 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Sottointerrogazione Sottointerrogazione ORDER BY r SELECT DISTINCT p s FROM tabelle con X o ORDER BY WHERE U oppure ∩ oppure – UNION, INTERSECT, EXCEPT Sottointerrogazione Sottointerrogazione G. Mecca - [email protected] - Basi di Dati 33 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Studenti della laurea triennale di anni successivi al primo” Risultato = s ciclo=‘laurea tr.’ AND anno>1 (Studenti) SELECT * FROM Studenti WHERE ciclo=‘laurea tr.’ AND anno>1; NOTA: le clausole vanno scritte nell’ordine in cui compaiono prima SELECT, poi FROM, poi WHERE, poi ORDER BY G. Mecca - [email protected] - Basi di Dati 34 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Matricola e cognome degli studenti che hanno sostenuto l’esame di informatica teorica” Risultato = p matricola, cognome ( s titolo=‘Inform. t.’ ( Studenti matr=studente Esami cod=corso Corsi )) SELECT matricola, cognome FROM Studenti JOIN Esami ON matr=studente JOIN Corsi ON cod=corso WHERE titolo=‘Inform. t.’; G. Mecca - [email protected] - Basi di Dati 35 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola FROM Serve a specificare le tabelle da cui prelevare i dati gli eventuali prodotti cartesiani gli eventuali join gli eventuali alias Prodotti cartesiani: sintassi FROM R, S, T AS V … es: FROM Professori, Numeri G. Mecca - [email protected] - Basi di Dati 36 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola FROM Join: Sintassi FROM S JOIN R ON S.A=R.B JOIN T AS V.. es: FROM Professori JOIN Numeri ON cod=professore Semantica applicazione degli operatori corrispondenti costruisce la tabella unica a cui applicare gli operatori successivi G. Mecca - [email protected] - Basi di Dati 37 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola WHERE Serve a specificare le selezioni Sintassi WHERE <condizione> Dove <condizione> è una condizione composta di sottocondizioni di selezione, collegate con connettivi booleani (AND, OR, NOT) sintassi identica alle condizioni dell’algebra G. Mecca - [email protected] - Basi di Dati 38 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola WHERE Nota possono comparire solo attributi di tabelle che compaiono nella clausola FROM Esempio FROM Professori WHERE qualifica=‘ordinario’ AND facolta IS NOT NULL Semantica applica le selezioni alle tabelle della FROM G. Mecca - [email protected] - Basi di Dati 39 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT Serve a specificare proiezioni funzioni aggregative ridenominazioni eliminazione di duplicati Nota anche in questo caso è possibile specificare solo attributi di tabelle che compaiono nella clausola FROM G. Mecca - [email protected] - Basi di Dati 40 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT Sintassi SELECT [DISTINCT] <attributi> Dove <attributi> è una lista di nomi di attributo con eventuali ridenominazioni nella forma <vecchioNome> AS <nuovoNome> Semantica applicare gli operatori corrispondenti alle tabelle della FROM G. Mecca - [email protected] - Basi di Dati 41 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT Esempi SELECT cognome, nome FROM Professori SELECT DISTINCT cognome, nome FROM Professori SELECT cognome AS cognomeProf, nome AS nomeProf FROM Professori G. Mecca - [email protected] - Basi di Dati 42 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT Nota la clausola SELECT è obbligatoria che succede se non ci sono proiezioni e ridenominazioni ? SELECT * non è necessario effettuare nè proiezioni nè ridenominazioni G. Mecca - [email protected] - Basi di Dati 43 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola ORDER BY Serve a specificare ordinamenti finali Sintassi ORDER BY <attributi> Dove <attributi> è una lista di attributi di tabelle che compaiono nella clausola FROM G. Mecca - [email protected] - Basi di Dati 44 SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola ORDER BY Esempio SELECT * FROM Studenti ORDER BY cognome, annoCorso Normalemente: l’ordinamento è crescente Ordinamento decrescente: DESC ORDER BY cognome, annoCorso DESC G. Mecca - [email protected] - Basi di Dati 45 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognomi e nomi degli studenti” ElencoNomi = DISTINCT (pcognome, nome (Studenti)) SELECT DISTINCT cognome, nome FROM Studenti; G. Mecca - [email protected] - Basi di Dati 46 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognomi e nomi degli studenti, in ordine alfabetico” ElencoNomi = ORDER BY cognome, nome ( DISTINCT (p cognome, nome (Studenti))) SELECT DISTINCT cognome, nome FROM Studenti ORDER BY cognome, nome; G. Mecca - [email protected] - Basi di Dati 47 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Voto medio riportato negli esami” Risultato = p AVG(voto) (Esami) SELECT AVG(voto) FROM Esami; G. Mecca - [email protected] - Basi di Dati 48 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognomi, nomi e numeri di telefono dei professori” (strategia a) ProfessoriENumeri = p cognome, nome, numero ( s cod=professore ( Professori X Numeri )) SELECT cognome, nome, numero FROM Professori, Numeri WHERE cod=professore; G. Mecca - [email protected] - Basi di Dati 49 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognomi, nomi e numeri di telefono dei professori” (strategia b) ProfessoriENumeri = p cognome, nome, numero ( Professori cod=professore Numeri) SELECT cognome, nome, numero FROM Professori JOIN Numeri ON cod=professore; G. Mecca - [email protected] - Basi di Dati 50 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognome e nome delle persone” Risultato = rcognome AS cognomePersona, nome AS nomePersona ( pcognome, nome (Professori)) U pcognome, nome (Studenti) SELECT cognome AS cognomePersona, nome AS nomePersona FROM Professori UNION SELECT cognome, nome FROM Studenti; G. Mecca - [email protected] - Basi di Dati 51 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognome e nome dei professori ordinari che non supervisionano tesi triennali” Risultato = r cognome AS cognomeProf, nome AS nomeProf ( p cognome, nome ( s qualifica = ‘Ordinario’ (Professori)) – p cognome, nome ( s ciclo = ‘laurea tr.’ ( Studenti G. Mecca - [email protected] - Basi di Dati relatore = cod Professori )) 52 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognome e nome dei professori ordinari che non supervisionano tesi triennali” SELECT cognome AS cognomeProf, nome AS nomeProf FROM Professori WHERE qualifica=‘ordinario’ EXCEPT SELECT cognome, nome FROM Studenti JOIN Professori ON relatore=cod WHERE ciclo=‘laurea tr.’; G. Mecca - [email protected] - Basi di Dati 53 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Cognomi e nomi degli studenti che all’esame di Programmazione hanno riportato un voto superiore a quello dei loro tutor” Tabelle coinvolte Studenti, Esami Tutorato, Esami AS EsamiTutor G. Mecca - [email protected] - Basi di Dati 54 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Studenti e tutor” (continua) Risultato = p cognome, nome ( s Esami.corso=‘Pr1’ AND EsamiTutor.corso=‘Pr1’ AND Esami.voto > EsamiTutor.voto ( Studenti matr=studente Esami matr=Tutorato.studente Tutorato Tutorato.tutor=EsamiTutor.studente G. Mecca - [email protected] - Basi di Dati (Esami AS EsamiTutor))) 55 SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi “Studenti e tutor” (continua) SELECT cognome, nome FROM Studenti JOIN Esami ON matr=studente JOIN Tutorato ON matr=Tutorato.studente JOIN Esami AS EsamiTutor ON Tutorato.tutor = EsamiTutor.studente WHERE Esami.corso=‘Pr1’ AND EsamiTutor.corso=‘Pr1’ AND Esami.voto > EsamiTutor.voto; G. Mecca - [email protected] - Basi di Dati 56 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni Nota una interrogazione particolare SELECT * FROM R; es: SELECT * FROM Corsi; preleva i dati dalla tabella R senza applicare nessun operatore è il modo con cui in un DBMS SQL si visualizza interattivamente il contenuto di una tabella G. Mecca - [email protected] - Basi di Dati 57 SQL-92 >> Concetti Fondamentali >> Interrogazioni Interrogazioni: Metodo di Scrittura Scrivere l’interrogazione in algebra relazionale utilizzando la forma standard Tradurre gli operatori nella sintassi di SQL Bisogna scegliere tra strategia a: prodotti cartesiani strategia b: join in generale è più efficiente la seconda G. Mecca - [email protected] - Basi di Dati 58 SQL-92 >> Concetti Fondamentali >> Cancellazioni Cancellazioni Istruzione del DML DELETE Sintassi DELETE FROM <tabella> [<clausola WHERE>]; <clausola WHERE>: identica a quella vista Semantica elimina dalla tabella tutte le ennuple (che soddisfano la condizione se è specificata) G. Mecca - [email protected] - Basi di Dati 59 SQL-92 >> Concetti Fondamentali >> Cancellazioni Cancellazioni Esempi: DELETE FROM Numeri; DELETE FROM Studenti WHERE matr=111; DELETE FROM Corsi WHERE ciclo=‘laurea tr.’ AND docente=‘FT’; G. Mecca - [email protected] - Basi di Dati 60 SQL-92 >> Concetti Fondamentali >> Aggiornamenti Aggiornamenti Istruzione del DML UPDATE Sintassi UPDATE <tabella> SET <attributo>=<espressione> [<clausola WHERE>] Semantica aggiorna il valore dell’attributo di tutte le ennuple (che soddisfano la condizione se è specificata) G. Mecca - [email protected] - Basi di Dati 61 SQL-92 >> Concetti Fondamentali >> Aggiornamenti Aggiornamenti Esempi: UPDATE Studenti SET anno=anno+1; UPDATE Studenti SET matr=11111 WHERE matr=111; UPDATE Corsi SET docente=‘VC’ WHERE ciclo=‘laurea tr.’ AND docente=‘FT’; G. Mecca - [email protected] - Basi di Dati 62 SQL-92 >> Sommario Concetti Fondamentali Introduzione Creazione ed eliminazione di bd Creazione ed eliminazione di tabelle Inserimenti di ennuple G. Mecca - [email protected] - Basi di Dati Interrogazioni clausola SELECT clausola FROM clausola WHERE clausola ORDER BY metodo di scrittura Cancellazioni Aggiornamenti 63 SQL-92 >> Concetti Fondamentali >> La Base di Dati di Esempio CREATE TABLE Professori ( CREATE TABLE Tutorato ( cod char(4) PRIMARY KEY, studente integer cognome varchar(20) NOT NULL, REFERENCES Studenti(matr), nome varchar(20) NOT NULL, tutor integer qualifica char(15), REFERENCES Studenti(matr), facolta char(10) ); PRIMARY KEY (studente,tutor)); CREATE TABLE Esami ( CREATE TABLE Studenti ( studente integer matr integer PRIMARY KEY, REFERENCES Studenti(matr) cognome varchar(20) NOT NULL, ON DELETE cascade nome varchar(20) NOT NULL, ON UPDATE cascade, ciclo char(20), corso char(3) anno integer, REFERENCES Corsi(cod), relatore char(4) voto integer, REFERENCES Professori(cod) lode bool, ); CHECK (voto>=18 and voto<=30), CHECK (not lode or voto=30), CREATE TABLE Corsi ( PRIMARY KEY (studente, corso)); cod char(3) PRIMARY KEY, titolo varchar(20) NOT NULL, CREATE TABLE Numeri ( ciclo char(20), professore char(4) docente char(4) REFERENCES Professori(cod), REFERENCES Professori(cod) numero char(9), ); PRIMARY KEY (professore,numero)); G. Mecca - [email protected] - Basi di Dati 64 SQL-92 >> Concetti Fondamentali >> La Base di Dati di Esempio Corsi T codice CHAR(3) PK Esami T titolo VARCHAR(20) Numeri T corso CHAR(3) PK, FK ciclo CHAR(20) numero CHAR(9) PK studente INTEGER PK, FK docente CHAR(4) docente CHAR(4) PK, FK FK voto INTEGER lode BOOL Professori T cod CHAR(4) PK cognome VARCHAR(20) Studenti T matr INTEGER PK cognome VARCHAR(20) nome VARCHAR(20) qualifica CHAR(15) facolta CHAR(10) nome VARCHAR(20) ciclo CHAR(20) anno INTEGER relatore CHAR(4) FK G. Mecca - [email protected] - Basi di Dati Tutorato T studente INTEGER PK, FK tutor INTEGER PK, FK 65 SQL-92 >> Concetti Fondamentali >> La Base di Dati di Esempio Professori Studenti Corsi cod cognome nome qualifica facolta FT Totti Francesco ordinario Ingegneria CV Vieri Christian associato Scienze ADP Del Piero Alessandro supplente null matr cognome nome ciclo anno relatore 111 Rossi Mario laurea tr. 1 null 222 Neri Paolo laurea tr. 2 null 333 Rossi Maria laurea tr. 1 null 444 Pinco Palla laurea tr. 3 FT 77777 Bruno Pasquale laurea sp. 1 FT 88888 Pinco Pietro laurea sp. 1 CV cod titolo ciclo docente PR1 Programmazione I laurea tr. FT ASD Algoritmi e Str. Dati laurea tr. CV INFT Informatica Teorica laurea sp. ADP G. Mecca - [email protected] - Basi di Dati 66 SQL-92 >> Concetti Fondamentali >> La Base di Dati di Esempio Tutorato Esami studente tutor professore numero 111 77777 FT 0971205145 222 77777 FT 347123456 333 88888 VC 0971205227 444 88888 ADP 0971205363 ADP 338123456 Numeri studente corso voto lode 111 PR1 27 false 222 ASD 30 true 111 INFT 24 false 77777 PR1 21 false 77777 ASD 20 false 88888 ASD 28 false 88888 PR1 30 false 88888 INFT 30 true G. Mecca - [email protected] - Basi di Dati 67 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. G. Mecca - [email protected] - Basi di Dati 68