Basi di Dati SQL92 Concetti Fondamentali versione 2
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 – mecca@unibas. it – Università della Basilicata
SQL-92 >> Sommario Concetti Fondamentali Introduzione m Creazione ed eliminazione di bd m Creazione ed eliminazione di tabelle m Inserimenti di ennuple m G. Mecca - mecca@unibas. it - Basi di Dati m Interrogazioni ðclausola SELECT ðclausola FROM ðclausola WHERE ðclausola ORDER BY ðmetodo di scrittura Cancellazioni m Aggiornamenti m 2
SQL-92 >> Concetti Fondamentali >> Introduzione m SQL (“Structured Query Language”) ðlinguaggio per l’interazione con il DBMS ðtutte le operazioni vengono specificate in SQL m DDL (“Data Definition Language”) ðcreazione degli oggetti dello schema m DCL (“Data Control Language”) ðcontrollo degli utenti e delle autorizzazioni m DML (“Data Manipulation Language”) ðmanipolazione dell’istanza della base di dati (interrogazioni e aggiornamenti) G. Mecca - mecca@unibas. it - Basi di Dati 3
SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard m Prime implementazioni ðIBM System/R 1979 (SEQUEL) m Primi prodotti commerciali ðIBM SQL/DS, Oracle 1981 m SQL-86 ðprima versione dello standard, basata sul dialetto IBM G. Mecca - mecca@unibas. it - Basi di Dati 4
SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard m SQL-89 (SQL-1) ðvincoli di integrità ðlivello 1 e livello 2 m SQL-92 (SQL-2) ðentry ðintermediate ðfull G. Mecca - mecca@unibas. it - 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 m Standard collegati m SQL/CLI ð“Call Level Interface” (ODBC), 1995 m SQL/PSM ð“Persistent Storage Modules”, 1997 m SQL/OLB ð“Object Language Bindings”, 1998 G. Mecca - mecca@unibas. it - Basi di Dati 6
SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard m SQL: 1999 (SQL-3) ðestensioni “objectrelational” ðcore: tutto SQL-92 entry, (quasi) tutto SQL-92 intermediate, parte di SQL-92 full ðpackages m Attualmente: SQL-92, full SQL-92, intermediate SQL-92, entry SQL-89, livello 2 SQL-89, livello 1 SQL: 1999, core ðlavori su SQL: 200 x G. Mecca - mecca@unibas. it - Basi di Dati 7
SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard m Implementazioni dello standard ðgli standard hanno in alcuni casi inseguito la tecnologia di mercato m 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 - mecca@unibas. it - Basi di Dati 8
SQL-92 >> Concetti Fondamentali >> Introduzione Storia dello Standard m Tipico DBMS sul mercato oggi ðessenzialmente SQL 92 intermediate ðlimitate funzionalità di SQL-92 full ðparte di SQL: 1999 m tipico DBMS commerciale 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 - mecca@unibas. it - Basi di Dati SQL: 1999, core 9
SQL-92 >> Concetti Fondamentali >> Introduzione Le Istruzioni Fondamentali m DDL ðcreazione della base di dati CREATE DATABASE ðcreazione delle tabelle CREATE TABLE m DML ðinserimento delle ennuple INSERT INTO G. Mecca - mecca@unibas. it - Basi di Dati ðinterrogazioni SELECT ðeliminazione delle ennuple DELETE ðmodifica della ennuple UPDATE 10
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di BD m Istruzioni del DDL m Sintassi ðCREATE DATABASE <nome>; ðDROP DATABASE <nome>; Esempio CREATE DATABASE universita; DROP DATABASE universita; G. Mecca - mecca@unibas. it - Basi di Dati 11
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di BD m 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 - mecca@unibas. it - Basi di Dati 12
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m Istruzioni del DDL ðCREATE TABLE ðDROP TABLE m Sintassi ðCREATE TABLE <nome> (<schema>); ðDROP TABLE <nome>; G. Mecca - mecca@unibas. it - Basi di Dati 13
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m Esempio: la tabella Professori CREATE TABLE Professori ( cod char(4) PRIMARY KEY, cognome varchar(20) NOT NULL, qualifica char(15), facolta char(10) ); DROP TABLE Professori; G. Mecca - mecca@unibas. it - Basi di Dati 14
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m 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 - mecca@unibas. it - Basi di Dati 15
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m <schema> ðuna o più definizioni di attributo ðzero o più definizioni di vincoli di tabella m Definizione di attributo ð<nomeattributo> <tipo> [<vincoli di colonna>] m Definizioni di vincoli di tabella ðnormalmente vincoli relativi a più attributi G. Mecca - mecca@unibas. it - Basi di Dati 16
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m <nomeattributo> ðidentificatore m <tipo> ðINT, INTEGER ðREAL, FLOAT ðDECIMAL(lung, dec) ðDOUBLE PRECISION ðCHAR(n), CHARACTER(n) ðVARCHAR(n) G. Mecca - mecca@unibas. it - Basi di Dati ðLONG VARCHAR, TEXT ðBOOLEAN, BOOL ðDATE ðTIMESTAMP ðBINARY(n), BIT(n) ðVARBINARY(n), VARBIT(n) ðLONG VARBINARY, BLOB 17
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m Vincoli di colonna ðPRIMARY KEY ðUNIQUE ðNOT NULL ðREFERENCES <chiave della tabella dest. > [ON update CASCADE] [ON delete CASCADE] ðCHECK (<espressione>) G. Mecca - mecca@unibas. it - Basi di Dati 18
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m 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 - mecca@unibas. it - Basi di Dati 19
SQL-92 >> Concetti Fondamentali >> Creazione ed Eliminazione di Tabelle m 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 - mecca@unibas. it - 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 - mecca@unibas. it - Basi di Dati 21
SQL-92 >> Concetti Fondamentali >> Inserimenti m Istruzione del DML ðINSERT m Sintassi ðINSERT INTO <tabella> VALUES (<valori>); m Semantica ðinserimento della ennupla nella tabella ðcorrispondenza ordinata tra valori e attributi (notazione posizionale) G. Mecca - mecca@unibas. it - Basi di Dati 22
SQL-92 >> Concetti Fondamentali >> Inserimenti m 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 (‘PR 1’, ‘Programmazione 1’, ‘laurea tr. ’, ‘FT’); G. Mecca - mecca@unibas. it - Basi di Dati 23
SQL-92 >> Concetti Fondamentali >> Interrogazioni m Istruzione del DML ðSELECT ðsintassi concreta per specificare operatori dell’algebra m 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 - mecca@unibas. it - Basi di Dati 24
SQL-92 >> Concetti Fondamentali >> Interrogazioni m Tre “clausole” principali (nucleo) ðSELECT, FROM, WHERE m SELECT ðproiezioni, ridenominazioni, elimin. duplicati m FROM ðtabelle, join, prodotti cartesiani, alias m WHERE ðselezioni G. Mecca - mecca@unibas. it - Basi di Dati 25
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “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 - mecca@unibas. it - Basi di Dati 26
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “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 - mecca@unibas. it - Basi di Dati 27
SQL-92 >> Concetti Fondamentali >> Interrogazioni m 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 - mecca@unibas. it - Basi di Dati 28
SQL-92 >> Concetti Fondamentali >> Interrogazioni m Forma standard dell’algebra ðuna o più sottointerrogazioni ðcorrelate da operatori insiemistici m Sottointerrogazioni ðstrategia a: prodotti cartesiani tra le tabelle (con eventuali alias) ðstrategia b: join tra le tabelle (con eventuali alias) >> G. Mecca - mecca@unibas. it - Basi di Dati 29
SQL-92 >> Concetti Fondamentali >> Interrogazioni m Sottointerrogazioni (Continua) ðselezioni ðproiezioni (con funzioni aggregative) ðeliminazione di duplicati (DISTINCT) ðridenominazioni ðordinamenti finali (ORDER BY) G. Mecca - mecca@unibas. it - Basi di Dati 30
SQL-92 >> Concetti Fondamentali >> Interrogazioni Sottointerrogazione ORDER BY r DISTINCT p s TABELLE, con X oppure ed ev. ALIAS U oppure ∩ oppure – Sottointerrogazione G. Mecca - mecca@unibas. it - Basi di Dati 31
SQL-92 >> Concetti Fondamentali >> Interrogazioni m Interrogazioni SQL ðuna o più sottointerrogazioni ðcon eventuali operatori insiemistici m Per ogni sottointerrogazione ðSELECT: proiezioni, ridenominazioni, distinct ðFROM: prodotti cartesiani o join, alias ð[WHERE]: selezioni (opzionale) ð[ORDER BY]: ordinamenti (opzionale) G. Mecca - mecca@unibas. it - Basi di Dati 32
SQL-92 >> Concetti Fondamentali >> Interrogazioni Sottointerrogazione ORDER BY r SELECT DISTINCT FROM p s tabelle con X o WHERE ORDER BY U oppure ∩ oppure – UNION, INTERSECT, EXCEPT Sottointerrogazione G. Mecca - mecca@unibas. it - Basi di Dati 33
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “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 - mecca@unibas. it - Basi di Dati 34
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “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 - mecca@unibas. it - Basi di Dati 35
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola FROM m Serve a specificare ðle tabelle da cui prelevare i dati ðgli eventuali prodotti cartesiani ðgli eventuali join ðgli eventuali alias m Prodotti cartesiani: sintassi ðFROM R, S, T AS V … ðes: FROM Professori, Numeri G. Mecca - mecca@unibas. it - Basi di Dati 36
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola FROM m Join: Sintassi ðFROM S JOIN R ON S. A=R. B JOIN T AS V. . ðes: FROM Professori JOIN Numeri ON cod=professore m Semantica ðapplicazione degli operatori corrispondenti ðcostruisce la tabella unica a cui applicare gli operatori successivi G. Mecca - mecca@unibas. it - Basi di Dati 37
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola WHERE m Serve a specificare ðle selezioni m Sintassi ðWHERE <condizione> m Dove ð<condizione> è una condizione composta di sottocondizioni di selezione, collegate connettivi booleani (AND, OR, NOT) ðsintassi identica alle condizioni dell’algebra G. Mecca - mecca@unibas. it - Basi di Dati 38
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola WHERE m Nota ðpossono comparire solo attributi di tabelle che compaiono nella clausola FROM m Esempio FROM Professori WHERE qualifica=‘ordinario’ AND facolta IS NOT NULL m Semantica ðapplica le selezioni alle tabelle della FROM G. Mecca - mecca@unibas. it - Basi di Dati 39
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT m Serve a specificare ðproiezioni ðfunzioni aggregative ðridenominazioni ðeliminazione di duplicati m Nota ðanche in questo caso è possibile specificare solo attributi di tabelle che compaiono nella clausola FROM G. Mecca - mecca@unibas. it - Basi di Dati 40
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT m Sintassi ðSELECT [DISTINCT] <attributi> m Dove ð<attributi> è una lista di nomi di attributo ðcon eventuali ridenominazioni nella forma <vecchio. Nome> AS <nuovo. Nome> m Semantica ðapplicare gli operatori corrispondenti alle tabelle della FROM G. Mecca - mecca@unibas. it - Basi di Dati 41
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT m Esempi SELECT cognome, nome FROM Professori SELECT DISTINCT cognome, nome FROM Professori SELECT cognome AS cognome. Prof, nome AS nome. Prof FROM Professori G. Mecca - mecca@unibas. it - Basi di Dati 42
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola SELECT m Nota ðla clausola SELECT è obbligatoria ðche succede se non ci sono proiezioni e ridenominazioni ? m SELECT * ðnon è necessario effettuare nè proiezioni nè ridenominazioni G. Mecca - mecca@unibas. it - Basi di Dati 43
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola ORDER BY m Serve a specificare ðordinamenti finali m Sintassi ðORDER BY <attributi> m Dove ð<attributi> è una lista di attributi di tabelle che compaiono nella clausola FROM G. Mecca - mecca@unibas. it - Basi di Dati 44
SQL-92 >> Concetti Fondamentali >> Interrogazioni Clausola ORDER BY m Esempio SELECT * FROM Studenti ORDER BY cognome, anno. Corso m Normalemente: ðl’ordinamento è crescente m Ordinamento decrescente: DESC ORDER BY cognome, anno. Corso DESC G. Mecca - mecca@unibas. it - Basi di Dati 45
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognomi e nomi degli studenti” Elenco. Nomi = DISTINCT (pcognome, nome (Studenti)) SELECT DISTINCT cognome, nome FROM Studenti; G. Mecca - mecca@unibas. it - Basi di Dati 46
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognomi e nomi degli studenti, in ordine alfabetico” Elenco. Nomi = ORDER BY cognome, nome ( DISTINCT (p cognome, nome (Studenti))) SELECT DISTINCT cognome, nome FROM Studenti ORDER BY cognome, nome; G. Mecca - mecca@unibas. it - Basi di Dati 47
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Voto medio riportato negli esami” Risultato = p AVG(voto) (Esami) SELECT AVG(voto) FROM Esami; G. Mecca - mecca@unibas. it - Basi di Dati 48
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognomi, nomi e numeri di telefono dei professori” (strategia a) Professori. ENumeri = p cognome, numero ( s cod=professore ( Professori X Numeri )) SELECT cognome, numero FROM Professori, Numeri WHERE cod=professore; G. Mecca - mecca@unibas. it - Basi di Dati 49
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognomi, nomi e numeri di telefono dei professori” (strategia b) Professori. ENumeri = p cognome, numero ( Professori cod=professore Numeri) SELECT cognome, numero FROM Professori JOIN Numeri ON cod=professore; G. Mecca - mecca@unibas. it - Basi di Dati 50
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognome e nome delle persone” Risultato = rcognome AS cognome. Persona, nome AS nome. Persona ( pcognome, nome (Professori)) U pcognome, nome (Studenti) SELECT cognome AS cognome. Persona, nome AS nome. Persona FROM Professori UNION SELECT cognome, nome FROM Studenti; G. Mecca - mecca@unibas. it - Basi di Dati 51
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognome e nome dei professori ordinari che non supervisionano tesi triennali” Risultato = r cognome AS cognome. Prof, nome AS nome. Prof ( p cognome, nome ( s qualifica = ‘Ordinario’ (Professori)) – p cognome, nome ( s ciclo = ‘laurea tr. ’ ( Studenti G. Mecca - mecca@unibas. it - Basi di Dati relatore = cod Professori )) 52
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognome e nome dei professori ordinari che non supervisionano tesi triennali” SELECT cognome AS cognome. Prof, nome AS nome. Prof FROM Professori WHERE qualifica=‘ordinario’ EXCEPT SELECT cognome, nome FROM Studenti JOIN Professori ON relatore=cod WHERE ciclo=‘laurea tr. ’; G. Mecca - mecca@unibas. it - Basi di Dati 53
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Cognomi e nomi degli studenti che all’esame di Programmazione hanno riportato un voto superiore a quello dei loro tutor” m Tabelle coinvolte ðStudenti, Esami ðTutorato, Esami AS Esami. Tutor G. Mecca - mecca@unibas. it - Basi di Dati 54
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Studenti e tutor” (continua) Risultato = p cognome, nome ( s Esami. corso=‘Pr 1’ AND Esami. Tutor. corso=‘Pr 1’ AND Esami. voto > Esami. Tutor. voto ( Studenti matr=studente Esami matr=Tutorato. studente Tutorato. tutor=Esami. Tutor. studente G. Mecca - mecca@unibas. it - Basi di Dati (Esami AS Esami. Tutor))) 55
SQL-92 >> Concetti Fondamentali >> Interrogazioni Esempi m “Studenti e tutor” (continua) SELECT cognome, nome FROM Studenti JOIN Esami ON matr=studente JOIN Tutorato ON matr=Tutorato. studente JOIN Esami AS Esami. Tutor ON Tutorato. tutor = Esami. Tutor. studente WHERE Esami. corso=‘Pr 1’ AND Esami. Tutor. corso=‘Pr 1’ AND Esami. voto > Esami. Tutor. voto; G. Mecca - mecca@unibas. it - Basi di Dati 56
SQL-92 >> Concetti Fondamentali >> Interrogazioni m 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 - mecca@unibas. it - Basi di Dati 57
SQL-92 >> Concetti Fondamentali >> Interrogazioni: Metodo di Scrittura m Scrivere l’interrogazione in algebra relazionale utilizzando la forma standard m Tradurre gli operatori nella sintassi di SQL m Bisogna scegliere tra ðstrategia a: prodotti cartesiani ðstrategia b: join ðin generale è più efficiente la seconda G. Mecca - mecca@unibas. it - Basi di Dati 58
SQL-92 >> Concetti Fondamentali >> Cancellazioni m Istruzione del DML ðDELETE m Sintassi ðDELETE FROM <tabella> [<clausola WHERE>]; ð<clausola WHERE>: identica a quella vista m Semantica ðelimina dalla tabella tutte le ennuple (che soddisfano la condizione se è specificata) G. Mecca - mecca@unibas. it - Basi di Dati 59
SQL-92 >> Concetti Fondamentali >> Cancellazioni m Esempi: DELETE FROM Numeri; DELETE FROM Studenti WHERE matr=111; DELETE FROM Corsi WHERE ciclo=‘laurea tr. ’ AND docente=‘FT’; G. Mecca - mecca@unibas. it - Basi di Dati 60
SQL-92 >> Concetti Fondamentali >> Aggiornamenti m Istruzione del DML ðUPDATE m Sintassi ðUPDATE <tabella> SET <attributo>=<espressione> [<clausola WHERE>] m Semantica ðaggiorna il valore dell’attributo di tutte le ennuple (che soddisfano la condizione se è specificata) G. Mecca - mecca@unibas. it - Basi di Dati 61
SQL-92 >> Concetti Fondamentali >> Aggiornamenti m 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 - mecca@unibas. it - Basi di Dati 62
SQL-92 >> Sommario Concetti Fondamentali Introduzione m Creazione ed eliminazione di bd m Creazione ed eliminazione di tabelle m Inserimenti di ennuple m G. Mecca - mecca@unibas. it - Basi di Dati m Interrogazioni ðclausola SELECT ðclausola FROM ðclausola WHERE ðclausola ORDER BY ðmetodo di scrittura Cancellazioni m Aggiornamenti m 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 - mecca@unibas. it - 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) PK, FK FK voto INTEGER lode BOOL Studenti T matr INTEGER PK cognome VARCHAR(20) T cod CHAR(4) PK cognome VARCHAR(20) qualifica CHAR(15) facolta CHAR(10) nome VARCHAR(20) ciclo CHAR(20) anno INTEGER relatore CHAR(4) Professori FK G. Mecca - mecca@unibas. it - 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 qualifica facolta FT Totti Francesco ordinario Ingegneria CV Vieri Christian associato Scienze ADP Del Piero Alessandro supplente null matr cognome 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 PR 1 Programmazione I laurea tr. FT ASD Algoritmi e Str. Dati laurea tr. CV INFT Informatica Teorica laurea sp. ADP G. Mecca - mecca@unibas. it - Basi di Dati 66
SQL-92 >> Concetti Fondamentali >> La Base di Dati di Esempio Tutorato Esami studente tutor 111 professore numero 77777 FT 0971205145 222 77777 FT 347123456 333 88888 VC 0971205227 444 88888 ADP 0971205363 ADP 338123456 Numeri studente corso voto lode 111 PR 1 27 false 222 ASD 30 true 111 INFT 24 false 77777 PR 1 21 false 77777 ASD 20 false 88888 ASD 28 false 88888 PR 1 30 false 88888 INFT 30 true G. Mecca - mecca@unibas. it - Basi di Dati 67
Termini della Licenza m This work is licensed under the Creative Commons Attribution. Share. Alike 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. m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-Share. Alike” 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 - mecca@unibas. it - Basi di Dati 68
- Slides: 68