G. Mecca – [email protected] – Università della Basilicata Basi di Dati SQL-92 Dettagli e...

54
G. Mecca – [email protected] – Università della G. Mecca – [email protected] – Università della Basilicata Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Transcript of G. Mecca – [email protected] – Università della Basilicata Basi di Dati SQL-92 Dettagli e...

Page 1: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

G. Mecca – [email protected] – Università della BasilicataG. Mecca – [email protected] – Università della Basilicata

Basi di Dati

SQL-92Dettagli e Approfondimenti

versione 2.0

Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Page 2: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

2G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Dettagli e Approfondimenti

DDL: Tabellevalori di defaultvincoli di riferimentomodifiche allo schema

DDL: Vistedefinizione e uso

DDL: Indici DCL

utenti

autorizzazionischemi esterni

DML: Aggiornamentiinserimenti

DML: Interrogazionioperatori insiemisticiSELECT: espressioniFROM: joinWHERE: op. like

SQL-92 >> Sommario

Page 3: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

3G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL

SQL-92 Intermediate DDL

“Data Definition Language”definizione degli oggetti dello schemaCREATE DATABASEDROP DATABASECREATE TABLEDROP TABLE

SQL-92 >> Dettagli e Approdondimenti

Page 4: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

4G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL

DCL“Data Control Language”utenti e autorizzazioni

DML“Data Manipulation Language”interrogazioni e aggiornamentiINSERT, DELETE, UPDATESELECT

SQL-92 >> Dettagli e Approdondimenti

Page 5: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

5G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Tabelle

CreazioneCREATE TABLE <nome> (<schema>);

<schema>una o più definizioni di attributozero o più definizioni di vincoli di tabella

Definizione di attributo<nomeattributo> <tipo> [<vincoli di colonna>]

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 6: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

6G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Valori di Default

Nella CREATE TABLE e’ possibile specificare valori standard per gli attributi

CREATE TABLE Studenti ( matr integer PRIMARY KEY,

cognome varchar(20) NOT NULL,nome varchar(20) NOT NULL,ciclo char(20) DEFAULT ‘laurea tr.’,anno integer NOT NULL DEFAULT 1,relatore char(4) REFERENCES

Professori(cod));

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 7: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

7G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Vincoli di Riferimento

Vincoli di riferimento di colonna<attr> <tipo> REFERENCES <chiave est.>es: docente char(4) REFERENCES Professori(cod)

Vincoli di riferimento di tabellaFOREIGN KEY (<attributi>)

REFERENCES <chiave est.>es: se la chiave di Collegi è prov. e numero FOREIGN KEY (provincia, collegio) REFERENCES Collegi(provincia, numero)

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 8: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

8G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Vincoli di Riferimento

Aggiornamenti in cascataON {UPDATE | DELETE} <azione>

<azione>CASCADESET NULLSET DEFAULTes: docente char(4) REFERENCES Professori(cod) ON UPDATE SET NULL;

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 9: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

9G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Modifiche allo Schema

Modifiche ad una tabella già esistenteALTER TABLE

Tre funzioniridenominazione della tabellaaggiunta, ridenominazione ed eliminazione

di attributiaggiunta ed eliminazione di vincoli

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 10: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

10G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Modifiche allo Schema

Ridenominazione della tabellaALTER TABLE <nome> RENAME TO

<nuovo nome>;es: ALTER TABLE Professori RENAME TO Docenti;

Modifiche agli attributiALTER TABLE <nome> RENAME COLUMN

<vecchio attributo> TO <nuovo attributo>;ALTER TABLE <nome> ADD COLUMN

<nuovo attributo> <tipo>;ALTER TABLE <nome> DROP COLUMN

<nome attributo>;

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 11: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

11G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Modifiche allo Schema

EsempioALTER TABLE Studenti ADD COLUMN

dataNascita DATE;ALTER TABLE Studenti ADD COLUMN

luogoNascita VARCHAR(20);ALTER TABLE Studenti ADD COLUMN

reddito DECIMAL(8,2);ALTER TABLE Studenti RENAME COLUMN

dataNascita TO dataDiNascita;ALTER TABLE Studenti DROP COLUMN

dataDiNascita;

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 12: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

12G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Modifiche allo Schema

Semantica dell’aggiunta di colonnela nuova colonna viene aggiunta allo schemaa tutte le ennuple viene aggiunto NULLoppure il valore standard se è stato specif.

Semantica dell’eliminazione di colonnela colonna viene eliminata dallo schema,

assieme agli eventuali vincoli relativiviene effettuata la proiezione delle ennuple

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 13: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

13G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Modifiche allo Schema

Aggiunta di vincoliALTER TABLE <nome> ADD CONSTRAINT

<nome vincolo> <def. vincolo di tabella>;l’istanza deve rispettare il vincolo

EsempioALTER TABLE Studenti ADD CONSTRAINT cf

UNIQUE (nome, cognome, dataNascita, luogoNascita);

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 14: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

14G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Modifiche allo Schema

Eliminazione di vincoliALTER TABLE <nome> DROP CONSTRAINT

<nome vincolo>;

EsempioALTER TABLE Studenti DROP CONSTRAINT cf;

Attenzione:molti DBMS non supportano nè DROP

COLUMN, né DROP CONSTRAINT

SQL-92 >> Dettagli e Approdondimenti >> DDL: Tabelle

Page 15: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

15G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Viste

Vistetabelle “virtuali”definite attraverso un’interrogazionepossono essere utilizzate come tabelle reali

Due funzioni fondamentalicreazione degli schemi esterni (privatezza

dei dati o ristrutturazioni)semplificazione di interrogazioni ricorrenti

SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste

Page 16: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

16G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Viste

Creazione di visteCREATE VIEW <nome> AS <SELECT>;

Semanticala vista viene ricalcolata sulla base della sua

definizione ogni volta che viene usata Eliminazione di viste

DROP VIEW <nome>;

SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste

Page 17: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

17G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Viste

Privatezza: esami senza votiCREATE VIEW EsamiSenzaVoti AS SELECT studente, corso FROM Esami;

SELECT * FROM EsamiSenzaVoti;

SELECT * FROM Studenti, EsamiSenzaVotiWHERE matr=studente;

DROP VIEW EsamiSenzaVoti;

SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste

Page 18: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

18G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Viste

Compiti ricorrenti: professori e numeriCREATE VIEW ProfessoriNumeri AS SELECT codice, nome, cognome, numero FROM Professori JOIN Numeri ON cod=professore;

SELECT * FROM ProfessoriNumeriORDER BY cognome, nome;

SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste

Page 19: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

19G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Viste

Differenza tra tabelle e vistele tabelle sono materializzate nella base di

dati, le viste no (sono derivate dalle tabelle)schema di una vista = attributi e tipi della

selectistanza di una vista = risultato della selectle tabelle sono aggiornabili, le viste nole viste sono sempre aggiornate e consistentinon hanno impatto sulle prestazioni

SQL-92 >> Dettagli e Approdondimenti >> DDL: Viste

Page 20: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

20G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Indici

Aggiunta di indici CREATE [UNIQUE] INDEX <nome> ON

<tabella>(<attributi>);UNIQUE: impone un vincolo di chiave sugli

attributi Esempio:

CREATE INDEX annociclo ON Studenti(anno, ciclo);

SQL-92 >> Dettagli e Approdondimenti >> DDL: Indici

Page 21: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

21G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DDL: Indici

Annotazioniindici secondariIn alcuni sistemi (es: PgSQL) anche il tipo di

indice (BTREE, HASH, ecc.)attenzione all’impatto sulle prestazioni

Eliminazione di indiciDROP INDEX <nome>;

EsempioDROP INDEX annociclo;

SQL-92 >> Dettagli e Approdondimenti >> DDL: Indici

Page 22: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

22G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DCL “Data Control Language”

Due funzioni principalicreazione ed eliminazione di utenticoncessione e revoca di autorizzazionisintassi non standard

UtentiCREATE USER, DROP USER

AutorizzazioniGRANT, REVOKE

SQL-92 >> Dettagli e Approdondimenti >> DCL

Page 23: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

23G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Creazione ed Eliminazione di Utenti Esempio: in PgSQL

CREATE USER <nome> [WITH [PASSWORD ‘<password>’] [CREATEDB] [CREATEUSER]];

es: CREATE USER pguser WITH PASSWORD‘pguser’ CREATEDB;

inserimenti nella tabella pg_shadow Eliminazione di utenti

DROP USER <nome>;es; CREATE USER pguser;

SQL-92 >> Dettagli e Approdondimenti >> DCL

Page 24: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

24G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Concessione e Revoca di privilegi

Autorizzazioninon tutti gli utenti sono autorizzati ad

accedere alle basi di datitipicamente: l’utente che crea la base di dati

e/o le tabelle (il proprietario) è autorizzato a fare tutto

gli altri utenti non possono fare niente il proprietario può concedere autorizzazioni

ad altri utenti

SQL-92 >> Dettagli e Approdondimenti >> DCL

Page 25: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

25G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Concessione e Revoca di privilegi

Istruzione GRANTGRANT <privilegi> ON <risorsa>

TO <utente> [WITH GRANT OPTION];<privilegi>: SELECT, INSERT, DELETE,

UPDATE, REFERENCES, ALL<risorsa>: tabella o vista<utente>: nome oppure PUBLICWITH GRANT OPTION: l’utente può

trasmettere i privilegi con l’istruzione GRANT

SQL-92 >> Dettagli e Approdondimenti >> DCL

Page 26: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

26G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Concessione e Revoca di Privilegi

EsempiGRANT ALL ON Studenti TO pguser;GRANT SELECT ON Professori TO pguser WITH GRANT OPTION;

GRANT SELECT ON EsamiSenzaVoti TO PUBLIC;

Revoca di privilegiREVOKE <privilegio> ON <risorsa>

FROM <utente>;es: REVOKE DELETE ON Studenti FROM pguser;

SQL-92 >> Dettagli e Approdondimenti >> DCL

Page 27: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

27G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Schemi Esterni

Costruzione dello schema logicol’utente o il DBA creano la base di datil’utente o il DBA creano lo schema

Costruzione degli schemi esternil’utente o il DBA definiscono eventuali vistel’utente o il DBA definiscono le autorizzazioni

Schema esterno di un utenteinsieme delle risorse visibili all’utente

SQL-92 >> Dettagli e Approdondimenti >> DCL

Page 28: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

28G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DML: Aggiornamenti

CancellazioniDELETE FROM <tabella> [<WHERE>];es: DELETE FROM Professori WHERE qualifica=‘supplente’;

ModificheUPDATE <tabella> SET

<attributo>=<espressione> [<WHERE>];es: UPDATE Professori SET qualifica=‘ordinario’ WHERE cod=‘VC’;

SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti

Page 29: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

29G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Inserimenti

Istruzione INSERTdue forme

Una ennupla alla voltavengono specificati i valori della ennupla

Più ennuple alla voltaviene specificata una SELECTtutto il risultato della SELECT viene inserito

nella tabella

SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti

Page 30: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

30G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Inserimenti

Una ennupla alla voltaINSERT INTO <tabella> VALUES (<valori>);

Non è necessario specificare tutti i valorilista di attributi assieme alla tabellai valori corrispondono ordinatamente agli attr.altri attributi: NULL oppure DEFAULT

EsempioINSERT INTO Corsi(cod, titolo) VALUES (‘BD’, ‘Basi di Dati’);

SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti

Page 31: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

31G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Inserimenti

Più ennuple alla volta (“copia” di ennuple)INSERT INTO <tabella> <SELECT>;tutti o parte degli attributi (corrispondenza)

Esempio:

SQL-92 >> Dettagli e Approdondimenti >> DML: Aggiornamenti

CREATE TABLE CorsiTriennale ( cod char(3) PRIMARY KEY, titolo varchar(20), docente char(4) REFERENCES Professori(cod) );

INSERT INTO CorsiTriennaleSELECT cod, titolo, docenteFROM CorsiWHERE ciclo=‘laurea tr.’;

differenza con le viste

Page 32: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

32G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DML: Interrogazioni

Istruzione SELECTuna sintassi concreta per esprimere

operazioni dell’algebra relazionale Interrogazioni, forma generale

più blocchi SELECT correlati da operatori insiemistici, UNION, INTERSECT, EXCEPT

blocco SELECT: fatto di varie clausole

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 33: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

33G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DML: Interrogazioni

SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni

UNION, INTERSECT, EXCEPT

Sottointerrogazione

Sottointerrogazione

ORDER BY

FROM

WHERE

SELECT

U oppure ∩ oppure –

Sottointerrogazione

Sottointerrogazione

ORDER BY

DISTINCT

tabelle con X o

Page 34: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

34G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DML: Interrogazioni

Blocco SELECTSELECT [DISTINCT] <proiezioni e ridenom.>FROM <tabelle, prod. cartesiani, join, alias>[WHERE <selezioni>][ORDER BY <attributi>];

Clausole obbligatorieSELECT e FROMWHERE e ORDER BY sono opzionali

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 35: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

35G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Esempi

“Titolo dei corsi tenuti dal Professor Francesco Totti, in ordine alfabetico”

SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni

SELECT titolo

Risultato = ORDER BY titolo (

Corsi docente=cod Professori

cognome=‘Totti’ AND nome=‘Francesco’ (

)

titolo (

)

FROM Corsi JOIN Professori ON docente=cod

WHERE cognome=‘Totti’ AND nome=‘Francesco’

ORDER BY titolo

)

Page 36: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

36G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Esempi

“Nome e cognome degli studenti il cui tutor è Pasquale Bruno”

SQL-92 >> Dettagli e Approfondimenti >> DML: Interrogazioni

SELECT Studenti.cognome, Studenti.nome

Risultato =

Studenti Studenti.matr=studente Tutorato

)

Tutor.cognome=‘Bruno’ AND Tutor.nome=‘Pasquale’ (

)

Studenti.cognome, Studenti.nome (

FROM Studenti JOIN Tutorato ON Studenti.matr=studente

WHERE Tutor.cognome=‘Bruno’ AND Tutor.nome=‘Pasquale’

JOIN Studenti AS Tutor ON tutor=Tutor.matr

tutor=Tutor.matr (Studenti AS Tutor)

Page 37: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

37G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

DML: Interrogazioni

Suggerimenti metodologiciper scrivere l’interrogazione SQL, ragionare

sugli operatori dell’algebra necessariseguire l’ordine di scrittura delle clausole

suggerito dalla forma standardragionare sulla struttura e sul contenuto dei

risultati intermedi

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 38: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

38G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Operatori Insiemistici

Eliminano i duplicati E’ possibile mantenere i duplicati

UNION ALL, INTERSECT ALL, EXCEPT ALL

Esempio: professori e studenti

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

SELECT cognome, nomeFROM Professori

SELECT cognome, nomeFROM Studenti;

UNION

SELECT cognome, nomeFROM Professori

SELECT cognome, nomeFROM Studenti;

UNION ALL

Page 39: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

39G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Operatori Insiemistici

Ordinamentile SELECT coinvolte non possono contenere

ORDER BYun’unica ORDER BY finale per il risultato

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

SELECT cognome, nomeFROM ProfessoriORDER BY cognome

SELECT cognome, nomeFROM Studenti;

UNION

SELECT cognome, nomeFROM Professori

SELECT cognome, nomeFROM StudentiORDER BY cognome;

UNION

(

)

Page 40: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

40G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausola SELECT

DISTINCT, proiezioni, ridenominazioni Eventuali funzioni aggregative

COUNT, SUM, MAX, MIN, AVGDISTINCT

Esempio: contare le facoltà dei professori

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

SELECT COUNT(facolta)FROM Professori

SELECT COUNT(DISTINCT facolta))FROM Professori

risultato scorretto, uguale al numero dei professori

risultato corretto, uguale al numerodi facoltà distinte

Page 41: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

41G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Espressioni

Possono comparire nella SELECT Operandi

valori degli attributi Operatori (non standard)

operatori aritmetici +, -, *, % ed altrifunzioni matematiche log, exp, sin, …funzioni su stringhe length, substring, …funzioni su date e tempi

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 42: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

42G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Espressioni

Esempio: reddito familiare in lireSELECT cognome, nome, reddito*1936.27FROM Studenti;

Esempio: media degli esami dello studente Pasquale Bruno in 110miSELECT AVG(voto)/30*110 AS media110miFROM Studenti JOIN Esami ON cod=studenteWHERE cognome=‘Bruno’ AND nome=‘Pasquale’;

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 43: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

43G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausola FROM

Tabelle, prodotti cartesiani, join e alias Join

FROM R [INNER] JOIN S ON A=B Altre forme di join

FROM R NATURAL JOIN SFROM R LEFT [OUTER] JOIN S ON A=BFROM R RIGHT [OUTER] JOIN S ON A=BFROM R FULL [OUTER] JOIN S ON A=B

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 44: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

44G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Join Esterni

Esempio: tutti i professori con i loro eventuali numeri telefonici

SELECT Professori.*, numeroFROM Professori LEFT OUTER JOIN Numeri ON cod=professore;

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 45: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

45G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Clausola WHERE

Condizioni di selezionecondizioni sui valori degli attributioperatori di confronto =, >, <, >=, <=, <>espressioni con operatori e funzioniconnettivi booleani AND, OR, NOT

Operatori specialiIS NULL, IS NOT NULLLIKE

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 46: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

46G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Operatore LIKE

Operatore LIKEcorrispondenza “parziale” tra valori testuali

“Pattern”sequenza di caratteri e simboli speciali%: una sequenza di 0 o più caratteri_ : un carattere qualsiasicorrisponde ad un insieme di stringhe

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 47: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

47G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Operatore LIKE

Esempi:‘B%i’: {‘Bianchi’, ‘Belli’, ‘Brutti’, ‘Bi’, …}‘p_ _ _a’: {‘palla’, ‘pasta’, ‘pista’, …}‘A_t%’: {‘Antonio’, ‘Artrite’, …}

Condizioni<attributo di tipo testo> LIKE <pattern>vera se il valore dell’attributo appartiene

all’insieme di stringhe corrispondenti

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 48: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

48G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Operatore LIKE

EsempiSELECT cognome, nomeFROM StudentiWHERE cognome LIKE ‘A%’;

SELECT *FROM CorsiWHERE titolo LIKE ‘%programmazione%’;

SQL-92 >> Dettagli e Approdondimenti >> DML: Interrogazioni

Page 49: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

49G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Dettagli e Approfondimenti

DDL: Tabellevalori di defaultvincoli di riferimentomodifiche allo schema

DDL: Vistedefinizione e uso

DDL: Indici DCL

utenti

autorizzazionischemi esterni

DML: Aggiornamentiinserimenti

DML: Interrogazionioperatori insiemisticiSELECT: espressioniFROM: joinWHERE: op. like

SQL-92 >> Sommario

Page 50: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

50G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio

CREATE TABLE Studenti ( matr integer PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, ciclo char(20), anno integer, relatore char(4) REFERENCES Professori(cod));

CREATE TABLE Professori ( cod char(4) PRIMARY KEY, cognome varchar(20) NOT NULL, nome varchar(20) NOT NULL, qualifica char(15), facolta char(10) );

CREATE TABLE Tutorato ( studente integer REFERENCES Studenti(matr), tutor integer REFERENCES Studenti(matr), PRIMARY KEY (studente,tutor));

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));

CREATE TABLE Corsi ( cod char(3) PRIMARY KEY, titolo varchar(20) NOT NULL, ciclo char(20), docente char(4) REFERENCES Professori(cod) );

CREATE TABLE Numeri ( professore char(4) REFERENCES Professori(cod), numero char(9), PRIMARY KEY (professore,numero));

Page 51: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

51G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio

Tutorato T

studente INTEGER PK, FK

tutor INTEGER PK, FK

Studenti T

matr INTEGER PK

cognome VARCHAR(20)

nome VARCHAR(20)

ciclo CHAR(20)

anno INTEGER

relatore CHAR(4) FK

Professori T

cod CHAR(4) PK

cognome VARCHAR(20)

nome VARCHAR(20)

qualifica CHAR(15)

facolta CHAR(10)

Esami T

corso CHAR(3) PK, FK

studente INTEGER PK, FK

voto INTEGER

lode BOOL

Corsi T

codice CHAR(3) PK

titolo VARCHAR(20)

ciclo CHAR(20)

docente CHAR(4) FK

Numeri T

numero CHAR(9) PK

docente CHAR(4) PK, FK

Page 52: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

52G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio

cod cognome nome qualifica facolta

FT Totti Francesco ordinario Ingegneria

CV Vieri Christian associato Scienze

ADP Del Piero Alessandro supplente null

Professori

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

Studenti

cod titolo ciclo docente

PR1 Programmazione I laurea tr. FT

ASD Algoritmi e Str. Dati laurea tr. CV

INFT Informatica Teorica laurea sp. ADP

Corsi

Page 53: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

53G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

SQL-92 >> Dettagli e Approfondimenti >> La Base di Dati di Esempio

studente tutor

111 77777

222 77777

333 88888

444 88888

Tutorato

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

Esami

professore numero

FT 0971205145

FT 347123456

VC 0971205227

ADP 0971205363

ADP 338123456

Numeri

Page 54: G. Mecca – mecca@unibas.it – Università della Basilicata Basi di Dati SQL-92 Dettagli e Approfondimenti versione 2.0 Questo lavoro è concesso in uso secondo.

54G. Mecca - [email protected] - Basi di DatiG. Mecca - [email protected] - Basi di Dati

Termini della Licenza

Termini della Licenza

This work is licensed under the Creative Commons Attribution-ShareAlike 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.