structured query language: sql

158
Structured Query Language: SQL Maurizio Fermeglia Università di Trieste email: [email protected]

Upload: castor-barron

Post on 03-Jan-2016

52 views

Category:

Documents


3 download

DESCRIPTION

Structured Query Language: SQL. Maurizio Fermeglia Università di Trieste email: [email protected]. SQL. Structured Query Language è un linguaggio con varie funzionalità: contiene sia il DDL sia il DML; esistono varie versioni dell’SQL; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Structured Query Language: SQL

Structured Query Language: SQL

Maurizio Fermeglia

Università di Triesteemail: [email protected]

Page 2: Structured Query Language: SQL

20 April 2023 - slide 2Linguaggio SQL

SQL

Structured Query Languageè un linguaggio con varie funzionalità:

contiene sia il DDL sia il DML;

esistono varie versioni dell’SQL;vediamo gli aspetti essenziali non i dettagli

Page 3: Structured Query Language: SQL

20 April 2023 - slide 3Linguaggio SQL

La storia di SQLDr. Codd + IBM = SYSTEM/R=SEQUEL (1970-74)ORACLE (1979)Berkeley + SQL = INGRES (1980)IBM: SQL/DS e DB2 (1983)dal 1983 ca., “standard di fatto” ANSI SQL1 Standard (1986)Sybase esce con RDBMS (1986)SQL Access group pubblica le specifiche ODBC (1991)ANSI SQL2 Standard (1992)ODBC standard in 19931996 specifiche interrogazione OLAP1999 standard SQL3 SQL 99(… scarso interesse industriale)200n SQL 200n nuovo che introduce tante novità compreso SQL XML SQLJ standard SQL all‘interno di programmi Java

Page 4: Structured Query Language: SQL

20 April 2023 - slide 4Linguaggio SQL

Standard SQLThe following is a short, incomplete history of the

SQL Standards – ISO/IEC 90751987 – Initial ISO/IEC Standard1989 – Referential Integrity1992 – SQL2 1995 SQL/CLI (ODBC) 1996 SQL/PSM – Procedural Language extensions

1999 – User Defined Types2003 – SQL/XML2008 – Expansions and corrections2011 (or 2012) System Versioned and Application Time Period Tables

April 20, 2023 Metadata Open Forum 4

Page 5: Structured Query Language: SQL

20 April 2023 - slide 5Linguaggio SQL

SQL standard 1 2SQL/1986 • SQL/1989 • SQL/1992

• Basic features, that is • SQL/1986 plus • SQL/1989 plus

• Tables • Columns • Views • Basic relational operations • Some integrity constraints • Language bindings to

COBOL, FORTRAN, C, etc.

• Partial Referential Integrity

• Entry Level SQL92 • Enhanced constraints • Full Referential Integrity • Table constraints • Schema manipulation • Row & Table constraints •   • Beyond Entry Level SQL92 • Assertions • Bit data type • CASE • Character Sets • Connection Management • DATETIME • Domains • Dynamic SQL • Get Diagnostics • Grouped operations • Information Schema • Multiple module support • National character sets • Natural joins (inner & outer) • Subqueries in check clauses • Temporary tables • Transaction Management • Union and intersect

Page 6: Structured Query Language: SQL

20 April 2023 - slide 6Linguaggio SQL

SQL 99 standard: carattersiticheSQL 1999 Feature • Brief Description

• SQL Data Type: String (BLOB, or Character (CLOB))

• The ability to store either bit images or large character documents

• SQL Data Type: Boolean • The ability to specify boolean data types, logic, and supporting rules

• SQL Data Type: Ref Types • The ability to have a DBMS generated or column value based pointer as a reference between rows of different tables.

• SQL Data Type: Arrays • The ability to have an ordered list of values within a column. Each value may be a RefType. Each may also be a ROW data structure

• SQL Data Type: ROW Data Structures

• The ability to have groups of “subcolumns” within a column. Each may be an array or a RefType

• SQL Data Type: User Defined Types

• The ability to completely define an non-traditional data type such as nautical distance.

• Triggers • The ability to specify the instigation of an action as a consequence of a state change in the database

• Savepoints • The ability to have cascading sets of “soft” commits that can be rolled back until there is a traditional hard-commit

• Roles Security Enhancement • The ability to define additional layers and kinds of security and the assignment of persons fulfilling the defined roles

• Recursion • The ability to fully model nested relationships such as hierarchies for organizations.

• Information Schema • A virtual database defined as virtual tables and real SQL views on the virtual tables that contain the complete set of metadata in support of defined databases.

• Call Level Interface • The complete specification of a DBMS vendor independent set of database access routines similar to that contained in the Microsoft ODBC specification.

• SQL Multi-Media: Full Text • The complete set of data structures, special full-text operations and SQL routines that support the loading, accessing, and maintenance of full-text type of data such as books, manuscripts.

• SQL Multi-Media: Spatial • The complete library or set of data structures and routines that support spatial data types and operations on those data types

• SQL Multi-Media: Still Image • The complete library or set of data structures and routines that support still image data types and operations on those data types

• SQL Programming Language • A complete SQL DBMS encapsulated programming language that includes traditional assignment, looping, branching, If..Then...Else, and CASE type constructs.

• Transaction, Connection, Session, and Diagnostics Management

• The ability to specify sessions and the management of those sessions in support of centralized or distributed type batch-type processing.

• SQL/MED • The routines and facilities in support of the management of types and classes of data that exists outside the domain of

Page 7: Structured Query Language: SQL

20 April 2023 - slide 7Linguaggio SQL

SQL standard ‘in fieri’SQL 2003: introduce l’uso di XML (poche funzionalità), funzioni di finestre, valori autogenerati (colonne identity)SQL 2006: introduce Xquery (ISO/IEC 9075-14:2006 ) e completa l’uso di XML: import e memorizzazioen di XML in DB, manipolazione di XML.SQL:2008 Legalizza uso di ORDER BY al di fuori della definizione dei corsori. Aggiunge INSTEAD OF nei triggers. Aggiunge TRUNCATE statement

Interessante link: http://troels.arvin.dk/db/rdbms/

Page 8: Structured Query Language: SQL

20 April 2023 - slide 8Linguaggio SQL

SQL CONTROLLA TUTTE LE FUNZIONI DI DBMS

Definizione dei dati (struttura e relazioni)Estrazione dei datiManipolazione di datiControllo degli accessi (privilegi di accesso)Condivisione dei datiIntegrità dei dati

DBMS Data Base

Dati

SQL Query

Page 9: Structured Query Language: SQL

20 April 2023 - slide 9Linguaggio SQL

Il ruolo di SQL (che cosa è)

Linguaggio di Query interattivoLinguaggio di programmazione per data baseLinguaggio di amministrazione di data baseLinguaggio per il client/serverLinguaggio per la gestione di data base distribuitiLinguaggio per la gestione di gateway

Page 10: Structured Query Language: SQL

20 April 2023 - slide 10Linguaggio SQL

CARATTERISTICHE E BENEFICI....Indipendenza dai venditori di HW e SWPortabilità attraverso varie piattoforme HWCoperto da standard internazioneli SQL1 ed SQL2 e SQL3Strategico per IBM – Oracle – Micrsoft - …Linguaggio per data base relazionali (unico)Strutturo ad alto livello (English-like)Linguaggio interattivoLinguaggio programmatico (Statico - Dinamico - API)In grado di fornire viste diverse del data baseLinguaggio completo (IF, triggers, ...) con T SQL e PL SQLDefinizione dinamica dei dati (anche quando in uso)Client / server

Page 11: Structured Query Language: SQL

SQL è strategico per molti Hw e Sw

Page 12: Structured Query Language: SQL

20 April 2023 - slide 12Linguaggio SQL

IL MITO DELLA PORTABILITA’

Ovvero ... non e’ vero che si puo fare tuttoCodici di errore non sono standardI tipi di dati non sone sempre supportatiLe tabelle di sistema non sono ugualiGli standard definiscono solo il SQL via programma, non l’interattivoDefinisce solo lo Static Embedded StandardAlcune differenze semantiche (funzioni, NULL)Sorting secondo ASCII o EBCDIC (collating sequence e codici)Struttura delle tabelle

Page 13: Structured Query Language: SQL

20 April 2023 - slide 15Linguaggio SQL

SQL LE BASI

Statements di manipolazione dei dati (DML) SELECT - INSERT - DELETE - UPDATE

Statements di definizione dei dati (DDL) CREATE/DROP/ALTER TABLE, VIEW, INDEX

Statements di accesso GRANT e REVOKE

Statements di per processi transazionali COMMIT - ROLLBACK

Statements programmatici DECLARE - OPEN - FETCH - CLOSE

Page 14: Structured Query Language: SQL

20 April 2023 - slide 16Linguaggio SQL

SQL: Le convenzioni

Sui NOMISui TIPI DI DATI (interi - testo ,...)Su COSTANTISu ESPRESSIONISu FUNZIONI

Page 15: Structured Query Language: SQL

20 April 2023 - slide 17Linguaggio SQL

Definizione dei dati in SQL

Istruzione CREATE TABLE: definisce uno schema di relazione e ne crea un’istanza vuota specifica attributi, domini e vincoli

Page 16: Structured Query Language: SQL

20 April 2023 - slide 18Linguaggio SQL

CREATE TABLE, esempioCREATE TABLE Impiegato(

Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL,

Cognome CHAR(20) NOT NULL, Dipart CHAR(15),Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip),

UNIQUE (Cognome,Nome) )

Page 17: Structured Query Language: SQL

20 April 2023 - slide 19Linguaggio SQL

Domini Domini elementari (predefiniti)Domini definiti dall'utente (semplici, ma riutilizzabili)

Domini elementariCarattere: singoli caratteri o stringhe, anche di lunghezza variabile Bit: singoli booleani o stringheNumerici, esatti e approssimatiData, ora, intervalli di tempoIntrodotti in SQL:1999:

Boolean BLOB, CLOB (binary/character large object): per grandi immagini e testi

Page 18: Structured Query Language: SQL

20 April 2023 - slide 20Linguaggio SQL

Definizione di domini

Istruzione CREATE DOMAIN: definisce un dominio (semplice), utilizzabile in definizioni di

relazioni, anche con vincoli e valori di default

CREATE DOMAIN, esempio

CREATE DOMAIN Voto AS SMALLINT DEFAULT NULLCHECK ( value >=18 AND value <= 30 )

Page 19: Structured Query Language: SQL

20 April 2023 - slide 21Linguaggio SQL

Vincoli intrarelazionaliNOT NULL UNIQUE definisce chiaviPRIMARY KEY: chiave primaria (una sola, implica NOT NULL)CHECK, vedremo più avanti

UNIQUE e PRIMARY KEY

due forme: nella definzione di un attributo, se forma da solo la chiave come elemento separato

Page 20: Structured Query Language: SQL

20 April 2023 - slide 22Linguaggio SQL

CREATE TABLE, esempioCREATE TABLE Impiegato(

Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL,

Cognome CHAR(20) NOT NULL, Dipart CHAR(15),Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip),

UNIQUE (Cognome,Nome) )

Page 21: Structured Query Language: SQL

20 April 2023 - slide 23Linguaggio SQL

Matricola CHAR(6) PRIMARY KEY

Matricola CHAR(6),…,PRIMARY KEY (Matricola)

PRIMARY KEY, alternative

Page 22: Structured Query Language: SQL

20 April 2023 - slide 24Linguaggio SQL

CREATE TABLE, esempioCREATE TABLE Impiegato(

Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL,

Cognome CHAR(20) NOT NULL, Dipart CHAR(15),Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip),

UNIQUE (Cognome,Nome) )

Page 23: Structured Query Language: SQL

20 April 2023 - slide 25Linguaggio SQL

Chiavi su più attributi, attenzione

Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, UNIQUE (Cognome,Nome),

Nome CHAR(20) NOT NULL UNIQUE, Cognome CHAR(20) NOT NULL UNIQUE,

Non è la stessa cosa!

Page 24: Structured Query Language: SQL

20 April 2023 - slide 26Linguaggio SQL

Vincoli interrelazionaliCHECK, vedremo più avanti REFERENCES e FOREIGN KEY permettono di definire vincoli di integrità referenziale di nuovo due sintassi

per singoli attributi su più attributi

E' possibile definire politiche di reazione alla violazione

Page 25: Structured Query Language: SQL

20 April 2023 - slide 27Linguaggio SQL

Matricola

3987

3295

9345

Vigili Cognome

Rossi

Neri

Neri

Nome

Luca

Piero

Mario

Mori Gino7543

InfrazioniCodice

34321

73321

64521

53524

Data

1/2/95

4/3/95

5/4/96

5/2/98

Vigile

3987

3295

3295

9345

Prov Numero

MI

TO

PR

PR

39548K

E39548

839548

839548

Page 26: Structured Query Language: SQL

20 April 2023 - slide 28Linguaggio SQL

InfrazioniCodice

34321

73321

64521

53524

Data

1/2/95

4/3/95

5/4/96

5/2/98

Vigile

3987

3295

3295

9345

Prov Numero

MI

TO

PR

PR

39548K

E39548

839548

839548

Auto Prov Numero

MI

TO

PR

39548K

E39548

839548

Cognome

Rossi

Rossi

Neri

Nome

Mario

Mario

Luca

Page 27: Structured Query Language: SQL

20 April 2023 - slide 29Linguaggio SQL

CREATE TABLE, esempioCREATE TABLE Infrazioni(

Codice CHAR(6) NOT NULL PRIMARY KEY, Data DATE NOT NULL, Vigile INTEGER NOT NULL

REFERENCES Vigili(Matricola), Provincia CHAR(2), Numero CHAR(6) , FOREIGN KEY(Provincia, Numero)

REFERENCES Auto(Provincia, Numero) )

Page 28: Structured Query Language: SQL

20 April 2023 - slide 30Linguaggio SQL

Modifiche degli schemi

ALTER DOMAINALTER TABLEDROP DOMAINDROP TABLE...

Page 29: Structured Query Language: SQL

20 April 2023 - slide 31Linguaggio SQL

Definzione degli indici

è rilevante dal punto di vista delle prestazionima è a livello fisico e non logicoin passato era importante perché in alcuni sistemi era l'unico mezzo per definire chiaviCREATE INDEX

Vedremo dettagli nella progettazione fisica

Page 30: Structured Query Language: SQL

20 April 2023 - slide 32Linguaggio SQL

DDL, in pratica

In molti sistemi si utilizzano strumenti diversi dal codice SQL per definire lo schema della base di dati

Page 31: Structured Query Language: SQL

20 April 2023 - slide 33Linguaggio SQL

SQL, operazioni sui dati

interrogazione: SELECT

modifica: INSERT, DELETE, UPDATE

Page 32: Structured Query Language: SQL

20 April 2023 - slide 34Linguaggio SQL

Istruzione SELECT (versione base)

SELECT ListaAttributiFROM ListaTabelle[ WHERE Condizione ]

"target list"clausola FROM clausola WHERE

Page 33: Structured Query Language: SQL

20 April 2023 - slide 35Linguaggio SQL

selezione

proiezione

Page 34: Structured Query Language: SQL

20 April 2023 - slide 36Linguaggio SQL

Nome Età

Persone

RedditoAndrea 27

Maria 55Anna 50

Filippo 26Luigi 50

Franco 60Olga 30

Sergio 85Luisa 75

Aldo 2521

4235304020413587

15

MadreMaternità FiglioLuisa

AnnaAnnaMariaMaria

LuisaMaria

OlgaFilippoAndrea

Aldo

Luigi

PadrePaternità Figlio

LuigiLuigi

FrancoFranco

SergioOlga

FilippoAndrea

Aldo

Franco

Page 35: Structured Query Language: SQL

20 April 2023 - slide 37Linguaggio SQL

Selezione e proiezione

Nome e reddito delle persone con meno di trenta anni

PROJNome, Reddito(SELEta<30(Persone))

select nome, redditofrom personewhere eta < 30

Page 36: Structured Query Language: SQL

20 April 2023 - slide 38Linguaggio SQL

Nome Età

Persone

RedditoAndrea 27 21

Maria 55 42Anna 50 35

Filippo 26 30Luigi 50 40

Franco 60 20Olga 30 41

Sergio 85 35Luisa 75 87

Aldo 25 15Andrea 27 21

Aldo 25 15

Filippo 26 30

Andrea 27 21Aldo 25 15

Filippo 26 30

211530

Reddito

Page 37: Structured Query Language: SQL

20 April 2023 - slide 39Linguaggio SQL

SELECT, abbreviazioni

select nome, redditofrom personewhere eta < 30

select p.nome as nome, p.reddito as reddito

from persone pwhere p.eta < 30

Page 38: Structured Query Language: SQL

20 April 2023 - slide 40Linguaggio SQL

Selezione, senza proiezione

Nome, età e reddito delle persone con meno di trenta anni

SELEta<30(Persone)

select *from personewhere eta < 30

Page 39: Structured Query Language: SQL

20 April 2023 - slide 41Linguaggio SQL

SELECT, abbreviazioni

select *from personewhere eta < 30

select nome, età, redditofrom personewhere eta < 30

Page 40: Structured Query Language: SQL

20 April 2023 - slide 42Linguaggio SQL

Proiezione, senza selezione

Nome e reddito di tutte le personePROJNome, Reddito(Persone)

select nome, redditofrom persone

Page 41: Structured Query Language: SQL

20 April 2023 - slide 43Linguaggio SQL

SELECT, abbreviazioni

R(A,B)

select *from R

equivale (intuitivamente) a

select X.A as A, X.B as Bfrom R Xwhere true

Page 42: Structured Query Language: SQL

20 April 2023 - slide 44Linguaggio SQL

Espressioni nella target list

select Reddito/2 as redditoSemestralefrom Personewhere Nome = 'Luigi'

Page 43: Structured Query Language: SQL

20 April 2023 - slide 45Linguaggio SQL

Condizione complessa

select *from personewhere reddito > 25

and (eta < 30 or eta > 60)

Page 44: Structured Query Language: SQL

20 April 2023 - slide 46Linguaggio SQL

Condizione “LIKE”

Le persone che hanno un nome che inizia per 'A' e ha una 'd' come terza lettera

select * from persone where nome like 'A_d%'

Page 45: Structured Query Language: SQL

20 April 2023 - slide 47Linguaggio SQL

Cognome Filiale EtàMatricola

Neri Milano 455998Rossi Roma 327309

Bruni Milano NULL9553

Impiegati

Neri Milano 455998Bruni Milano NULL9553

SEL Età > 40 OR Età IS NULL (Impiegati)

Neri Milano 455998Bruni Milano NULL9553

Gestione dei valori nulli

Gli impiegati la cui età è o potrebbe essere maggiore di 40

Page 46: Structured Query Language: SQL

20 April 2023 - slide 48Linguaggio SQL

Gli impiegati la cui età è o potrebbe essere maggiore di 40

SEL Età > 40 OR Età IS NULL (Impiegati)

select *from impiegatiwhere eta > 40 or eta is null

Page 47: Structured Query Language: SQL

20 April 2023 - slide 49Linguaggio SQL

Selezione, proiezione e join

Istruzioni SELECT con una sola relazione nella clausola FROM permettono di realizzare:

selezioni, proiezioni, ridenominazioni

con più relazioni nella FROM si realizzano join (e prodotti cartesiani)

Page 48: Structured Query Language: SQL

20 April 2023 - slide 54Linguaggio SQL

SQL: esecuzione delle interrogazioni

Le espressioni SQL sono dichiarative e noi ne stiamo vedendo la semanticaIn pratica, i DBMS eseguono le operazioni in modo efficiente, ad esempio:

eseguono le selezioni al più presto se possibile, eseguono join e non prodotti cartesiani

Page 49: Structured Query Language: SQL

20 April 2023 - slide 55Linguaggio SQL

SQL: speciifca delle interrogazioni

La capacità dei DBMS di "ottimizzare" le interrogazioni, rende (di solito) non necessario preoccuparsi dell'efficienza quando si specifica un'interrogazioneÈ perciò più importante preoccuparsi della chiarezza (anche perché così è più difficile sbagliare …)

Page 50: Structured Query Language: SQL

20 April 2023 - slide 56Linguaggio SQL

Proiezione, attenzione

Cognome Filiale StipendioMatricola

Neri Milano 645998Neri Napoli 557309

Rossi Roma 645698Rossi Roma 449553

• cognome e filiale di tutti gli impiegati

PROJ Cognome, Filiale (Impiegati)

Page 51: Structured Query Language: SQL

20 April 2023 - slide 57Linguaggio SQL

Cognome Filiale

Neri MilanoNeri Napoli

Rossi Roma

Cognome Filiale

Neri MilanoNeri Napoli

Rossi RomaRossi Roma

selectcognome, filiale

from impiegati

select distinctcognome, filiale

from impiegati

Page 52: Structured Query Language: SQL

20 April 2023 - slide 58Linguaggio SQL

Nome Età

Persone

RedditoAndrea 27

Maria 55Anna 50

Filippo 26Luigi 50

Franco 60Olga 30

Sergio 85Luisa 75

Aldo 2521

4235304020413587

15

MadreMaternità FiglioLuisa

AnnaAnnaMariaMaria

LuisaMaria

OlgaFilippoAndrea

Aldo

Luigi

PadrePaternità Figlio

LuigiLuigi

FrancoFranco

SergioOlga

FilippoAndrea

Aldo

Franco

Page 53: Structured Query Language: SQL

20 April 2023 - slide 59Linguaggio SQL

Selezione, proiezione e joinI padri di persone che guadagnano più di venti milioni

PROJPadre(paternita JOIN Figlio =Nome

SELReddito>20 (persone))

select distinct padrefrom persone, paternitawhere figlio = nome and reddito > 20

Page 54: Structured Query Language: SQL

20 April 2023 - slide 60Linguaggio SQL

Join naturale

Padre e madre di ogni persona

paternita JOIN maternita

select paternita.figlio,padre, madrefrom maternita, paternitawhere paternita.figlio = maternita.figlio

Page 55: Structured Query Language: SQL

20 April 2023 - slide 61Linguaggio SQL

Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre

PROJNome, Reddito, RP (SELReddito>RP

(RENNP,EP,RP Nome,Eta,Reddito(persone)JOINNP=Padre

(paternita JOIN Figlio =Nome persone)))

select f.nome, f.reddito, p.redditofrom persone p, paternita, persone fwhere p.nome = padre and

figlio = f.nome andf.reddito > p.reddito

Page 56: Structured Query Language: SQL

20 April 2023 - slide 62Linguaggio SQL

SELECT, con ridenominazione del risultato

select figlio, f.reddito as reddito, p.reddito as redditoPadre

from persone p, paternita, persone fwhere p.nome = padre and figlio = f.nome

and .reddito > p.reddito

Page 57: Structured Query Language: SQL

20 April 2023 - slide 63Linguaggio SQL

Join esplicitoPadre e madre di ogni persona

select paternita.figlio,padre, madrefrom maternita, paternitawhere paternita.figlio = maternita.figlio

select madre, paternita.figlio, padre from maternita join paternita on

paternita.figlio = maternita.figlio

Page 58: Structured Query Language: SQL

20 April 2023 - slide 64Linguaggio SQL

SELECT con join esplicito, sintassiSELECT …FROM Tabella { … JOIN Tabella ON CondDiJoin }, …[ WHERE AltraCondizione ]

Page 59: Structured Query Language: SQL

20 April 2023 - slide 65Linguaggio SQL

Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre

select f.nome, f.reddito, p.redditofrom persone p, paternita, persone fwhere p.nome = padre and

figlio = f.nome andf.reddito > p.reddito

select f.nome, f.reddito, p.redditofrom persone p join paternita on p.nome = padre

join persone f on figlio = f.nome

where f.reddito > p.reddito

Page 60: Structured Query Language: SQL

20 April 2023 - slide 66Linguaggio SQL

Ulteriore estensione: join naturale(meno diffuso)

PROJFiglio,Padre,Madre(paternita JOIN Figlio = Nome REN Nome=Figlio(maternita))

paternita JOIN maternita

select madre, paternita.figlio, padre from maternita join paternita on

paternita.figlio = maternita.figlio

select madre, paternita.figlio, padre from maternita natural join paternita

Page 61: Structured Query Language: SQL

20 April 2023 - slide 67Linguaggio SQL

Join esterno: "outer join"Padre e, se nota, madre di ogni persona

select paternita.figlio, padre, madrefrom paternita left join maternita

on paternita.figlio = maternita.figlio

select paternita.figlio, padre, madrefrom paternita left outer join maternita

on paternita.figlio = maternita.figlio

outer e' opzionale

Page 62: Structured Query Language: SQL

20 April 2023 - slide 68Linguaggio SQL

Outer joinselect paternita.figlio, padre, madrefrom maternita join paternita

on maternita.figlio = paternita.figlio

select paternita.figlio, padre, madrefrom maternita left outer join paternita

on maternita.figlio = paternita.figlio

select paternita.figlio, padre, madrefrom maternita full outer join paternita

on maternita.figlio = paternita.figlio

Page 63: Structured Query Language: SQL

20 April 2023 - slide 69Linguaggio SQL

Ordinamento del risultato

Nome e reddito delle persone con meno di trenta anni in ordine alfabetico

select nome, redditofrom personewhere eta < 30order by nome

Page 64: Structured Query Language: SQL

20 April 2023 - slide 70Linguaggio SQL

Persone

Nome RedditoAndrea 21

Aldo 15Filippo 30

Persone

Nome Reddito

Andrea 21Aldo 15

Filippo 30

select nome, redditofrom personewhere eta < 30

select nome, redditofrom personewhere eta < 30order by nome

Page 65: Structured Query Language: SQL

20 April 2023 - slide 71Linguaggio SQL

Operatori aggregati• Nelle espressioni della target list possiamo avere anche

espressioni che calcolano valori a partire da insiemi di ennuple: conteggio, minimo, massimo, media, totale sintassi base (semplificata):

Funzione ( [ DISTINCT ] * )Funzione ( [ DISTINCT ] Attributo )

Page 66: Structured Query Language: SQL

20 April 2023 - slide 72Linguaggio SQL

Operatori aggregati: COUNT• Il numero di figli di Franco

select count(*) as NumFigliDiFrancofrom Paternitawhere Padre = 'Franco'

l’operatore aggregato (count) viene applicato al risultato dell’interrogazione:

select * from Paternitawhere Padre = 'Franco'

Page 67: Structured Query Language: SQL

20 April 2023 - slide 73Linguaggio SQL

PadrePaternità Figlio

LuigiLuigi

SergioOlga

FilippoFrancoFranco

AndreaAldo

Franco

FrancoFranco

AndreaAldo

NumFigliDiFranco2

Page 68: Structured Query Language: SQL

20 April 2023 - slide 74Linguaggio SQL

COUNT e valori nulliselect count(*) from persone

select count(reddito) from persone

select count(distinct reddito) from persone

Nome EtàPersone RedditoAndrea 27

Maria 55Anna 50

Aldo 2521

2135

NULL

Page 69: Structured Query Language: SQL

20 April 2023 - slide 75Linguaggio SQL

Altri operatori aggregati

SUM, AVG, MAX, MIN

Media dei redditi dei figli di Franco

select avg(reddito) from persone join paternita on nome=figlio where padre='Franco'

Page 70: Structured Query Language: SQL

20 April 2023 - slide 76Linguaggio SQL

Operatori aggregati e valori nulli

select avg(reddito) as redditomediofrom persone

Nome EtàPersone RedditoAndrea 27

Maria 55Anna 50

Aldo 2530

3636

NULL

Page 71: Structured Query Language: SQL

20 April 2023 - slide 77Linguaggio SQL

Operatori aggregati e target listun’interrogazione scorretta:

select nome, max(reddito)from persone

di chi sarebbe il nome? La target list deve essere omogenea

select min(eta), avg(reddito)from persone

Page 72: Structured Query Language: SQL

20 April 2023 - slide 78Linguaggio SQL

Le funzioni possono essere applicate a partizioni delle relazioniClausola GROUP BY:

GROUP BY listaAttributi

Operatori aggregati e raggruppamenti

Page 73: Structured Query Language: SQL

20 April 2023 - slide 79Linguaggio SQL

Il numero di figli di ciascun padre

select padre, count(*) AS NumFiglifrom paternitagroup by Padre

Operatori aggregati e raggruppamenti

Padrepaternita Figlio

LuigiLuigi

SergioOlga

FilippoFrancoFranco

AndreaAldo

Franco Padre NumFigli

LuigiSergio

2Franco 2

1

Page 74: Structured Query Language: SQL

20 April 2023 - slide 80Linguaggio SQL

Semantica di interrogazioni con operatori aggregati e raggruppamenti

1. interrogazione senza group by e senza operatori aggregati

select *from paternita

2. si raggruppa e si applica l’operatore aggregato a ciascun gruppo

Page 75: Structured Query Language: SQL

20 April 2023 - slide 81Linguaggio SQL

Raggruppamenti e target listscorretta

select padre, avg(f.reddito), p.redditofrom persone f join paternita on figlio = nome join

persone p on padre =p.nomegroup by padre

correttaselect padre, avg(f.reddito), p.redditofrom persone f join paternita on figlio = nome join

persone p on padre =p.nomegroup by padre, p.reddito

Page 76: Structured Query Language: SQL

20 April 2023 - slide 82Linguaggio SQL

Condizioni sui gruppiI padri i cui figli hanno un reddito medio maggiore di 25

select padre, avg(f.reddito)from persone f join paternita on figlio = nome group by padre having avg(f.reddito) > 25

Page 77: Structured Query Language: SQL

20 April 2023 - slide 83Linguaggio SQL

WHERE o HAVING?I padri i cui figli sotto i 30 anni hanno un reddito medio maggiore di 20

select padre, avg(f.reddito)from persone f join paternita on figlio = nomewhere eta < 30 group by padre having avg(f.reddito) > 25

Page 78: Structured Query Language: SQL

20 April 2023 - slide 84Linguaggio SQL

Sintassi, riassumiamo

SelectSQL ::= select ListaAttributiOEspressionifrom ListaTabelle[ where CondizioniSemplici ][ group by ListaAttributiDiRaggruppamento ][ having CondizioniAggregate ][ order by ListaAttributiDiOrdinamento ]

Page 79: Structured Query Language: SQL

20 April 2023 - slide 85Linguaggio SQL

Unione, intersezione e differenzaLa select da sola non permette di fare unioni; serve un costrutto esplicito:

select … union [all]select ...

i duplicati vengono eliminati (a meno che si usi all); anche dalle proiezioni!

Page 80: Structured Query Language: SQL

20 April 2023 - slide 86Linguaggio SQL

Notazione posizionale!select padre from paternitaunionselect madrefrom maternita

quali nomi per gli attributi del risultato? nessuno quelli del primo operando …

Page 81: Structured Query Language: SQL

20 April 2023 - slide 87Linguaggio SQL

Luisa

AnnaAnnaMariaMaria

LuisaMaria

OlgaFilippoAndrea

Aldo

Luigi

Figlio

LuigiLuigi

FrancoFranco

SergioOlga

FilippoAndrea

Aldo

Franco

Luisa

AnnaAnnaMariaMaria

LuisaMaria

OlgaFilippoAndrea

Aldo

Luigi

Padre Figlio

LuigiLuigi

FrancoFranco

SergioOlga

FilippoAndrea

Aldo

Franco

Page 82: Structured Query Language: SQL

20 April 2023 - slide 88Linguaggio SQL

Notazione posizionale, 2select padre, figliofrom paternitaunionselect figlio, madrefrom maternita

select padre, figliofrom paternitaunionselect madre, figliofrom maternita

Page 83: Structured Query Language: SQL

20 April 2023 - slide 89Linguaggio SQL

Notazione posizionale, 3

Anche con le ridenominazioni non cambia niente:select padre as genitore, figliofrom paternitaunionselect figlio, madre as genitorefrom maternita

Corretta:select padre as genitore, figliofrom paternitaunionselect madre as genitore, figlio from maternita

Page 84: Structured Query Language: SQL

20 April 2023 - slide 90Linguaggio SQL

Differenzaselect Nomefrom Impiegatoexceptselect Cognome as Nomefrom Impiegato

vedremo che si può esprimere con select nidificate

Page 85: Structured Query Language: SQL

20 April 2023 - slide 91Linguaggio SQL

Intersezioneselect Nomefrom Impiegatointersectselect Cognome as Nomefrom Impiegato

equivale a

select I.Nomefrom Impiegato I, Impiegato Jwhere I.Nome = J.Cognome

Page 86: Structured Query Language: SQL

20 April 2023 - slide 92Linguaggio SQL

Interrogazioni nidificate

le condizioni atomiche permettono anche il confronto fra un attributo (o più, vedremo poi) e il risultato di una

sottointerrogazione quantificazioni esistenziali

Page 87: Structured Query Language: SQL

20 April 2023 - slide 93Linguaggio SQL

nome e reddito del padre di Franco

select Nome, Redditofrom Persone, Paternitawhere Nome = Padre and Figlio = 'Franco'

select Nome, Redditofrom Personewhere Nome = ( select Padre

from Paternita where Figlio = 'Franco')

Page 88: Structured Query Language: SQL

20 April 2023 - slide 94Linguaggio SQL

Interrogazioni nidificate, commentiLa forma nidificata è “meno dichiarativa”, ma talvolta più leggibile (richiede meno variabili)La forma piana e quella nidificata possono essere combinateLe sottointerrogazioni non possono contenere operatori insiemistici (“l’unione si fa solo al livello esterno”); la limitazione non è significativa

Page 89: Structured Query Language: SQL

20 April 2023 - slide 95Linguaggio SQL

Nome e reddito dei padri di persone che guadagnano più di 20 milioni

select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome

and F.Reddito > 20

select Nome, Redditofrom Personewhere Nome in (select Padre

from Paternitawhere Figlio = any (select Nome

from Personewhere Reddito > 20))

Page 90: Structured Query Language: SQL

20 April 2023 - slide 96Linguaggio SQL

Nome e reddito dei padri di persone che guadagnano più di 20 milioni

select distinct P.Nome, P.Redditofrom Persone P, Paternita, Persone Fwhere P.Nome = Padre and Figlio = F.Nome

and F.Reddito > 20

select Nome, Redditofrom Personewhere Nome in (select Padre

from Paternita, Persone where Figlio = Nomeand Reddito > 20)

Page 91: Structured Query Language: SQL

20 April 2023 - slide 97Linguaggio SQL

Interrogazioni nidificate, commenti, 2

La prima versione di SQL prevedeva solo la forma nidificata (o strutturata), con una sola relazione in ogni clausola FROM. Insoddisfacente:

la dichiaratività è limitata non si possono includere nella target list attributi di relazioni nei

blocchi interni

Page 92: Structured Query Language: SQL

20 April 2023 - slide 100Linguaggio SQL

Quantificazione esistenziale Ulteriore tipo di condizione

EXISTS ( Sottoespressione )

Page 93: Structured Query Language: SQL

20 April 2023 - slide 101Linguaggio SQL

Le persone che hanno almeno un figlio

select *from Personewhere exists ( select *

from Paternitawhere Padre = Nome) or

exists ( select *from Maternitawhere Madre = Nome)

Page 94: Structured Query Language: SQL

20 April 2023 - slide 102Linguaggio SQL

I padri i cui figli guadagnano tutti più di venti milioni

select distinct Padrefrom Paternita Zwhere not exists (

select *from Paternita W, Personewhere W.Padre = Z.Padre

and W.Figlio = Nome and Reddito <= 20)

Page 95: Structured Query Language: SQL

20 April 2023 - slide 103Linguaggio SQL

Semantica delle espressioni “correlate”

L’interrogazione interna viene eseguita una volta per ciascuna ennupla dell’interrogazione esterna

Page 96: Structured Query Language: SQL

20 April 2023 - slide 108Linguaggio SQL

Operazioni di aggiornamento

operazioni di inserimento: insert eliminazione: delete modifica: update

di una o più ennuple di una relazionesulla base di una condizione che può coinvolgere anche altre relazioni

Page 97: Structured Query Language: SQL

20 April 2023 - slide 109Linguaggio SQL

Inserimento

INSERT INTO Tabella [ ( Attributi ) ] VALUES( Valori )

oppure

INSERT INTO Tabella [ ( Attributi )] SELECT ...

Page 98: Structured Query Language: SQL

20 April 2023 - slide 110Linguaggio SQL

INSERT INTO Persone VALUES ('Mario',25,52)

INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)

INSERT INTO Persone(Nome, Reddito) VALUES('Lino',55)

INSERT INTO Persone ( Nome )SELECT PadreFROM PaternitaWHERE Padre NOT IN (SELECT Nome FROM Persone)

Page 99: Structured Query Language: SQL

20 April 2023 - slide 111Linguaggio SQL

Inserimento , commentil’ordinamento degli attributi (se presente) e dei valori è significativole due liste debbono avere lo stesso numero di elementise la lista di attributi è omessa, si fa riferimento a tutti gli attributi della relazione, secondo l’ordine con cui sono stati definitise la lista di attributi non contiene tutti gli attributi della relazione, per gli altri viene inserito un valore nullo (che deve essere permesso) o un valore di default

Page 100: Structured Query Language: SQL

20 April 2023 - slide 112Linguaggio SQL

Eliminazione di ennupleDELETE FROM Tabella

[ WHERE Condizione ]

Page 101: Structured Query Language: SQL

20 April 2023 - slide 113Linguaggio SQL

DELETE FROM PersoneWHERE Eta < 35

DELETE FROM PaternitaWHERE Figlio NOT in ( SELECT Nome FROM Persone)

DELETE FROM Paternita

Page 102: Structured Query Language: SQL

20 April 2023 - slide 114Linguaggio SQL

Eliminazione, commentielimina le ennuple che soddisfano la condizionepuò causare (se i vincoli di integrità referenziale sono definiti con politiche di reazione cascade) eliminiazioni da altre relazioniricordare: se la where viene omessa, si intende where true

Page 103: Structured Query Language: SQL

20 April 2023 - slide 115Linguaggio SQL

Modifica di ennuple

UPDATE NomeTabellaSET Attributo = < Espressione |

SELECT … | NULL | DEFAULT >

[ WHERE Condizione ]

Page 104: Structured Query Language: SQL

20 April 2023 - slide 116Linguaggio SQL

UPDATE Persone SET Reddito = 45WHERE Nome = 'Piero'

UPDATE Persone SET Reddito = Reddito * 1.1WHERE Eta < 30

Page 105: Structured Query Language: SQL

20 April 2023 - slide 117Linguaggio SQL

Vincoli di integrità generici: checkSpecifica di vincoli di ennupla (e anche vincoli più complessi)check ( Condizione )

Page 106: Structured Query Language: SQL

20 April 2023 - slide 118Linguaggio SQL

Check, esempiocreate table Impiegato(Matricola character(6),Cognome character(20),Nome character(20),Sesso character not null check (sesso in (‘M’,‘F’))Stipendio integer,Superiore character(6), check (Stipendio <= (select Stipendio from Impiegato J where Superiore = J.Matricola) )

Page 107: Structured Query Language: SQL

20 April 2023 - slide 119Linguaggio SQL

Vincoli di integrità generici: asserzioniSpecifica vincoli a livello di schema

create assertion NomeAss check ( Condizione )

create assertion AlmenoUnImpiegato check (1 <= ( select count(*) from Impiegato ))

Page 108: Structured Query Language: SQL

20 April 2023 - slide 120Linguaggio SQL

Vistecreate view NomeVista [ ( ListaAttributi ) ] as SelectSQL[ with [ local | cascaded ] check option ]

create view ImpiegatiAmmin (Matricola, Nome, Cognome, Stipendio) as

select Matricola, Nome, Cognome, Stipendiofrom Impiegatowhere Dipart = 'Amministrazione' and Stipendio > 10

Page 109: Structured Query Language: SQL

20 April 2023 - slide 121Linguaggio SQL

Interrogazioni sulle vistePossono fare riferimento alle viste come se fossero relazioni di base

select * from ImpiegatiAmmin

equivale a (e viene eseguita come)

select Nome, Cognome, Stipendiofrom Impiegatowhere Dipart = 'Amministrazione' and Stipendio > 10

Page 110: Structured Query Language: SQL

20 April 2023 - slide 122Linguaggio SQL

Aggiornamenti sulle viste

Ammessi (di solito) solo su viste definite su una sola relazioneAlcune verifiche possono essere imposte

Page 111: Structured Query Language: SQL

20 April 2023 - slide 123Linguaggio SQL

create view ImpiegatiAmminPoveri asselect *from ImpiegatiAmminwhere Stipendio < 50with check option

check option permette modifiche, ma solo a condizione che la ennupla continui ad appartenere alla vista (non posso modificare lo stipendio portandolo a 60)

Page 112: Structured Query Language: SQL

20 April 2023 - slide 124Linguaggio SQL

Un’interrogazione non standardLa nidificazione nella having non è ammessa

select Dipartfrom Impiegatogroup by Diparthaving sum(Stipendio) >= all (select sum(Stipendio) from Impiegato group by Dipart)

Page 113: Structured Query Language: SQL

20 April 2023 - slide 125Linguaggio SQL

Soluzione con le vistecreate view BudgetStipendi(Dip,TotaleStipendi) as

select Dipart, sum(Stipendio)from Impiegatogroup by Dipart

select Dipfrom BudgetStipendiwhere TotaleStipendi =(select max(TotaleStipendi) from BudgetStipendi)

Page 114: Structured Query Language: SQL

20 April 2023 - slide 126Linguaggio SQL

Ancora sulle visteInterrogazione scorretta

select avg(count(distinct Ufficio))from Impiegatogroup by Dipart

Con una vistacreate view DipartUffici(NomeDip,NroUffici) as

select Dipart, count(distinct Ufficio)from Impiegatogroup by Dipart;

select avg(NroUffici)from DipartUffici

Page 115: Structured Query Language: SQL

20 April 2023 - slide 129Linguaggio SQL

Funzioni scalariFunzioni a livello di ennupla che restituiscono singoli valoriTemporali current_date, extract(year from …)

Manipolazione stringhe char_length, lower

Conversione cast

Condizionali …

Page 116: Structured Query Language: SQL

20 April 2023 - slide 130Linguaggio SQL

Funzioni condizionaliCase, coalesce, nullif

select Nome, Cognome, coalesce(Dipart,'Ignoto')from Impiegato

select Targa, case Tipo

when 'Auto' then 2.58 * KWatt when 'Moto' then (22.00 + 1.00 *

KWatt) else null end as Tassa

from Veicolowhere Anno > 1975

Page 117: Structured Query Language: SQL

20 April 2023 - slide 131Linguaggio SQL

Controllo dell'accesso

In SQL è possibile specificare chi (utente) e come (lettura, scrittura, …) può utilizzare la base di dati (o parte di essa)Oggetto dei privilegi (diritti di accesso) sono di solito le tabelle, ma anche altri tipi di risorse, quali singoli attributi, viste o dominiUn utente predefinito _system (amministratore della base di dati) ha tutti i privilegiIl creatore di una risorsa ha tutti i privilegi su di essa

Page 118: Structured Query Language: SQL

20 April 2023 - slide 132Linguaggio SQL

PrivilegiUn privilegio è caratterizzato da:

la risorsa cui si riferisce l'utente che concede il privilegio l'utente che riceve il privilegio l'azione che viene permessa la trasmissibilità del privilegio

Page 119: Structured Query Language: SQL

20 April 2023 - slide 133Linguaggio SQL

Tipi di privilegi offerti da SQLinsert: permette di inserire nuovi oggetti (ennuple)update: permette di modificare il contenutodelete: permette di eliminare oggetti select: permette di leggere la risorsa references: permette la definizione di vincoli di integrità referenziale verso la risorsa (può limitare la possibilità di modificare la risorsa)usage: permette l'utilizzo in una definizione (per esempio, di un dominio)

Page 120: Structured Query Language: SQL

20 April 2023 - slide 134Linguaggio SQL

grant e revokeConcessione di privilegi:

grant < Privileges | all privileges > on Resource to Users [ with grant option ]

grant option specifica se il privilegio può essere trasmesso ad altri utenti

grant select on Department to StefanoRevoca di privilegi

revoke Privileges on Resource from Users [ restrict | cascade ]

Page 121: Structured Query Language: SQL

20 April 2023 - slide 136Linguaggio SQL

Autorizzazioni, commenti

Come autorizzare un utente a vedere solo alcune ennuple di una relazione?

Attraverso una vista: Definiamo la vista con una condizione di selezione Attribuiamo le autorizzazioni sulla vista, anziché sulla relazione di base

Page 122: Structured Query Language: SQL

20 April 2023 - slide 138Linguaggio SQL

Transazione

Insieme di operazioni da considerare indivisibile ("atomico"), corretto anche in presenza di concorrenza e con effetti definitivi Proprietà ("acide"):

Atomicità Consistenza Isolamento Durabilità (persistenza)

Page 123: Structured Query Language: SQL

20 April 2023 - slide 139Linguaggio SQL

Le transazioni sono … atomiche

La sequenza di operazioni sulla base di dati viene eseguita per intero o per niente:

trasferimento di fondi da un conto A ad un conto B: o si fanno il prelevamento da A e il versamento su B o nessuno dei due

Page 124: Structured Query Language: SQL

20 April 2023 - slide 140Linguaggio SQL

Le transazioni sono … consistenti

Al termine dell'esecuzione di una transazione, i vincoli di integrità debbono essere soddisfatti"Durante" l'esecuzione ci possono essere violazioni, ma se restano alla fine allora la transazione deve essere annullata per intero ("abortita")

Page 125: Structured Query Language: SQL

20 April 2023 - slide 141Linguaggio SQL

Le transazioni sono … isolate

L'effetto di transazioni concorrenti deve essere coerente (ad esempio "equivalente" all'esecuzione separata)

se due assegni emessi sullo stesso conto corrente vengono incassati contemporaneamente si deve evitare di trascurarne uno

Page 126: Structured Query Language: SQL

20 April 2023 - slide 142Linguaggio SQL

I risultati delle transazioni sono durevoli

La conclusione positiva di una transazione corrisponde ad un impegno (in inglese commit) a mantenere traccia del risultato in modo definitivo, anche in presenza di guasti e di esecuzione concorrente

Page 127: Structured Query Language: SQL

20 April 2023 - slide 143Linguaggio SQL

Transazioni in SQLIstruzioni fondamentali

begin transaction: specifica l'inizio della transazione (le operazioni non vengono eseguite sulla base di dati)

commit work: le operazioni specificate a partire dal begin transaction vengono eseguite

rollback work: si rinuncia all'esecuzione delle operazioni specificate dopo l'ultimo begin transaction

Page 128: Structured Query Language: SQL

20 April 2023 - slide 144Linguaggio SQL

Una transazione in SQLbegin transaction;update ContoCorrente

set Saldo = Saldo – 10where NumeroConto = 12345 ;

update ContoCorrenteset Saldo = Saldo + 10where NumeroConto = 55555 ;

commit work;

Page 129: Structured Query Language: SQL

20 April 2023 - slide 145Linguaggio SQL

TransazioniFine della transazione

istruzioni COMMIT e ROLLBACK (ABORT)(standard SQL-92)

Esito della transazione esecuzione come unità indivisibile COMMIT: rende permanenti le operazioni errore: operazioni annullate dal sistema ROLLBACK: annulla esplicitamente le operazioni

Tecnologia DBMS >> Concetti Avanzati >> Transazioni

Page 130: Structured Query Language: SQL

20 April 2023 - slide 146Linguaggio SQL

Transazioni: La Base di Dati dei VideoTecnologia DBMS >> Concetti Avanzati >> Transazioni

CREATE TABLE Videoc (

cod integer PRIMARY KEY,

titolo varchar(50) NOT NULL,

regista varchar(20),

quantita integer DEFAULT 1,

prezzo numeric(4,2)

);

CREATE TABLE Noleggi (

video integer NOT NULL REFERENCES Videoc(cod),

tessera char(4) NOT NULL REFERENCES Tessere(cod),

data date NOT NULL,

PRIMARY KEY

(video, tessera, data)

);

CREATE TABLE Tessere (

cod char(4) PRIMARY KEY,

nomeCliente varchar(50),

indirizzo varchar(50),

totalenoleggi integer DEFAULT 0

);

BEGIN TRANSACTION;

INSERT INTO Noleggi VALUES

(110, ‘pp02’, ‘2002-04-15’);

UPDATE Videoc SET quant.=quant.-1

WHERE cod=110;

UPDATE Tessere SET totn.=totn.+1

WHERE cod=‘pp02’;

COMMIT;

Esempio: noleggio di una videocassetta

Page 131: Structured Query Language: SQL

20 April 2023 - slide 147Linguaggio SQL

Gestione delle Transazioni in un DBMS

Due moduli fondamentaliGestore della concorrenza

garantisce isolamento e consistenza implementa tecniche più sofisticate di sincr.

Gestore dell’affidabilità garantisce atomicità e durevolezza utilizza un file di registrazioni (“log”) per consentire il

recupero in caso di guasti

Tecnologia DBMS >> Concetti Avanzati >> Transazioni

Page 132: Structured Query Language: SQL

20 April 2023 - slide 148Linguaggio SQL

Gestione della ConcorrenzaAssume atomicità e durevolezza

fornite dal gestore dell’affidabilità >>

Due obiettivi fondamentali garantire la consistenza della base di dati

(partendo da uno stato consistente, la transazione genera uno stato consistente)

garantire l’isolamento delle transazioni(le transazioni devono essere eseguite come se fossero isolate)

Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza

Page 133: Structured Query Language: SQL

20 April 2023 - slide 149Linguaggio SQL

ConsistenzaImpone i vincoli di integrità

definiti nel DDL (più eventuali “trigger”)

Vincoli di riferimento la verifica può essere immediata o differita

Istruzione SET CONSTRAINTS SET CONSTRAINTS ALL DEFERRED;

Vincoli differibili (“deferrable”) i vincoli vengono verificati solo al COMMIT

Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza

Page 134: Structured Query Language: SQL

20 April 2023 - slide 150Linguaggio SQL

Consistenza

Esempio: in Noleggi video integer NOT NULL

REFERENCES Videoc(cod) DEFERRABLE;

Tecnologia DBMS >> Concetti Avanzati >> Gestione della Concorrenza

BEGIN TRANSACTION;

SET CONSTRAINTS ALL DEFERRED;

INSERT INTO Noleggi VALUES

(200, ‘pp02’, ‘2002-04-15’);

INSERT INTO Videoc VALUES

(200, ‘Clerks’, ...);

UPDATE Videoc SET

quantita=quantita-1

WHERE cod=200;

COMMIT;

Attenzione: parte

dell’integrità è a

carico del

programmatore (in questo caso non

viene aggiornato

il totalenoleggi della

tessera)

Page 135: Structured Query Language: SQL

20 April 2023 - slide 152Linguaggio SQL

Gestione dell’AffidabilitàDue obiettivi fondamentali

garantire l’atomicità delle transazioni garantire la durevolezza degli effetti, anche in caso di guasti

(recupero della base di dati)

Idee di base registrare tutte le azioni eseguite in un file di registro (“log”) mantenere copie dei dati e del log (“mirror”) strettamente legato alla gestione del buffer

Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità

Page 136: Structured Query Language: SQL

20 April 2023 - slide 153Linguaggio SQL

Gestione dell’Affidabilità

File di registro (“log”) si registrano tutte le istruzioni di aggiornamento tutte le istruzioni di start transaction tutte le istruzioni commit tutte le istruzioni rollback

Formato dei record del log ciascun record del log registra la modifica di un

record della base di dati da parte di una transazione

<id trans, id record, vecchio val, nuovo val.>

Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità

Page 137: Structured Query Language: SQL

20 April 2023 - slide 154Linguaggio SQL

Gestione dell’Affidabilità

Protocollo di scrittura anticipata “Write Ahead Logging” (WAL)

Idea le informazioni vengono scritte secondo un ordine

che garantisce la ripristinabilità in caso di guasti i record del log sono scritti prima dei record della

base di dati (garantisce l’atomicità) i record del log di una transazione sono scritti tutti

prima di effettuare il commit (garantisce la durevolezza)

Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità

Page 138: Structured Query Language: SQL

20 April 2023 - slide 155Linguaggio SQL

Gestione dell’Affidabilità

Attenzione in ogni istante parte delle pagine del disco sono

nel buffer in memoria centrale se sono state modificate, in caso di guasto si

perdono le modifiche

Punto di controllo (“checkpoint”) “fotografia” stabile della situazione della base di

dati in un certo istante informazioni sulle transazioni attive in quel

momento scrittura su disco delle pagine relative del buffer

Tecnologia DBMS >> Concetti Avanzati >> Gestione dell’Affidabilità

Page 139: Structured Query Language: SQL

20 April 2023 - slide 160Linguaggio SQL

Architettura di un DBMSTecnologia DBMS >> Concetti Avanzati >> Architettura di un DBMS

Gestione del discoGestione del disco

DBDB

Page 140: Structured Query Language: SQL

20 April 2023 - slide 161Linguaggio SQL

Il Transaction Log

Il transaction log registra il dettaglio di tutte le transazioni

Qualsiasi cambiamento fatto sul DB

Come fare gli undo dei cambiamenti

Quando e come la transazione è completata

Il log è memorizzato su disco, non in memoria

Se il sistema va in crash, è preservato

Write ahead log rule La scrittura sul log viene

fatta PRIMA del COMMIT

Page 141: Structured Query Language: SQL

20 April 2023 - slide 162Linguaggio SQL

System FailuresUn system failure significa che tutte le transazioni sono coinvolte

Software crashes Power failures

I dischi fisici NON sono coinvolti e danneggiati

In diversi momenti il DBMS fa dei checkpoint

Tutte le transazioni committed sono scritte sul disco

Vengono registrate su disco tutte le transazioni in esecuzione

Page 142: Structured Query Language: SQL

20 April 2023 - slide 163Linguaggio SQL

Tipi di Transazioni

Last Checkpoint System Failure

T1

T2

T3

T4

T5

Page 143: Structured Query Language: SQL

20 April 2023 - slide 164Linguaggio SQL

System RecoveryTutte le transazioni che erano in esecuzione al momento del failure devono essere cancellate e rifatteTutte le transazioni committed dopo l’ultimo checkpoint devono essere ripetute

Transazione del tipo T1 non necessita recoveryTransazione del tipo T3 o T5 necessita di undo e restart Transazione del tipo T2 o T4 necessita di redo

Page 144: Structured Query Language: SQL

20 April 2023 - slide 165Linguaggio SQL

Transaction RecoveryUNDO e REDO: lista delle transazioni

UNDO = tutte le transazioni running all’ ultimo checkpointREDO = empty

Per ciascuna entry nel file di log, a fare inizio dall’ultimo checkpointIf a BEGIN TRANSACTION entry is found for T

Add T to UNDOIf a COMMIT entry is found for T

Move T from UNDO to REDO

Page 145: Structured Query Language: SQL

20 April 2023 - slide 166Linguaggio SQL

Transaction Recovery

T1

T2

T3

T4

T5

Checkpoint Failure

UNDO: T2, T3

REDO: Last Checkpoint

Active transactions: T2, T3

Page 146: Structured Query Language: SQL

20 April 2023 - slide 167Linguaggio SQL

Transaction Recovery

T1

T2

T3

T4

T5

Checkpoint Failure

UNDO: T2, T3, T4

REDO: T4 Begins

Add T4 to UNDO

Page 147: Structured Query Language: SQL

20 April 2023 - slide 168Linguaggio SQL

Transaction Recovery

T1

T2

T3

T4

T5

Checkpoint Failure

UNDO: T2, T3, T4, T5

REDO: T5 begins

Add T5 to UNDO

Page 148: Structured Query Language: SQL

20 April 2023 - slide 169Linguaggio SQL

Transaction Recovery

T1

T2

T3

T4

T5

Checkpoint Failure

UNDO: T3, T4, T5

REDO: T2 T2 Commits

Move T2 to REDO

Page 149: Structured Query Language: SQL

20 April 2023 - slide 170Linguaggio SQL

Transaction Recovery

T1

T2

T3

T4

T5

Checkpoint Failure

UNDO: T3, T5

REDO: T2, T4

T4 Commits

Move T4 to REDO

Page 150: Structured Query Language: SQL

20 April 2023 - slide 171Linguaggio SQL

Media FailuresSystem failures non sono preoccupanti

Informazioni dopo l’ultimo checkpoint sono interessate

Si recuperano dal transaction log

Media failures (disk crashes etc) sono più serie

Dati su disco sono danneggiati

Il transaction log stesso può essere danneggiato

Page 151: Structured Query Language: SQL

20 April 2023 - slide 172Linguaggio SQL

BackupsBackups sono necessari !! Per proteggersi da media failure

Il transaction log e l’intero contenuto del database è scritto su uno storage secondario (tape)

Time consuming, e spesso richiede down time

Frequenza di backups Alta per non perdere

informazioni Non troppo frequente per

non causare rallentamenti operativi

Ogni giorno (notte) di solito

Backup storage

Page 152: Structured Query Language: SQL

20 April 2023 - slide 173Linguaggio SQL

Recovery from Media FailureRestore del database dall’ultimo backupUsare il transaction log per fare il redo dei cambiamenti dopo ultimo back up

Se il transaction log è danneggiato non si può fare lo step 2

Memorizzare il log su un device separato del database

Rischio di perderli entrambi è ridotto

Page 153: Structured Query Language: SQL

20 April 2023 - slide 174Linguaggio SQL

Concorrenza

Grossi databases sono usati da tante persone

Molte transazioni aperte sul database

Devono girare tutte insieme in modo indipendente

Si deve garantire isolamento

Se non ci fosse concorrenza, le transazioni sarebbero sequenziali

Un coda di transazioni Lunghe transazioni

rallenterebbero gli altri

Page 154: Structured Query Language: SQL

20 April 2023 - slide 175Linguaggio SQL

Transactions and Recovery

Problemi di concorrenzaPer gestire transazioni concorrenti si intercalano le operazioniCiascuna transazione va in time sharing

Questo comporta diversi problemi

Lost updates Uncommitted updates Incorrect analysis

Tutte dovute alla rottura dell’isolamento

Page 155: Structured Query Language: SQL

20 April 2023 - slide 176Linguaggio SQL

Lost UpdateT1 eT2 leggono X, lo modificano entrambe, entrambe lo scrivono

L’effetto finale di T1 e T2 dovrebbe essere nessun cambiamento di X

Solo i cambiamenti di T2 sono visibili, quindi il valore finale di X è aumentato di 5

T1 T2

Read(X)

X = X - 5

Read(X)

X = X + 5

Write(X)

Write(X)

COMMIT

COMMIT

Page 156: Structured Query Language: SQL

20 April 2023 - slide 177Linguaggio SQL

Uncommitted UpdateT2 vede i cambiamenti di X fatti da T1, ma T1 è rolled back

Il cambio fatto da T1 è un undone dal rollback

Ma nel finale non è così: il cambio di T2 viene anche eliminato

T1 T2

Read(X)

X = X - 5

Write(X)

Read(X)

X = X + 5

Write(X)

ROLLBACK

COMMIT

Page 157: Structured Query Language: SQL

20 April 2023 - slide 178Linguaggio SQL

Inconsistent analysisT1 non cambia la somma di X ed Y, ma T2 vede il cambiamento

T1 consiste di due parti – prendi 5 da X e poi aggiungi 5 ad Y

T2 vede l’effetto del primo, ma non del secondo

T1 T2

Read(X)

X = X - 5

Write(X)

Read(X)

Read(Y)

Sum = X+Y

Read(Y)

Y = Y + 5

Write(Y)

Page 158: Structured Query Language: SQL

SQL è STANDARD

Strategico per IBM, Microsoft, OracleOgni DBMS vendor ha il suo SQL based softwareDomina in ogni mercato, dai PC ai OLTP OLAPEmerge come standard dell’office e PC LAN