linguaggi per basi di dati e sql - unical...sql (structured query language): parzialmente...

47
Linguaggi per basi di dati e SQL

Upload: others

Post on 11-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

Linguaggi per basi di dati e SQL

Page 2: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 2

Linguaggi per basi di dati

  operazioni sullo schema   DDL: data definition language

  operazioni sui dati   DML: data manipulation language

  interrogazione ("query")   aggiornamento

Page 3: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 3

Linguaggi di interrogazione per basi di dati relazionali

  Dichiarativi   specificano le proprietà del risultato ("che

cosa")

  Procedurali   specificano le modalità di generazione del

risultato ("come")

Page 4: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 4

Linguaggi di interrogazione

  Algebra relazionale: procedurale   Calcolo relazionale:

dichiarativo (teorico)   SQL (Structured Query Language):

parzialmente dichiarativo (reale)   QBE (Query by Example):

dichiarativo (reale)

Page 5: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 5

SQL   Structured Query Language   è un linguaggio con varie funzionalità:

  contiene sia il DDL sia il DML

  ne esistono varie versioni   vediamo gli aspetti essenziali, non i dettagli

Page 6: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 6

SQL: "storia"   prima proposta SEQUEL (1974);   prime implementazione in SQL/DS e Oracle

(1981)   dal 1983 ca., "standard di fatto"   standard (1986, poi 1989 e infine 1992)

recepito in parte   standard SQL3 imminente

Page 7: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 7

Algebra relazionale

  Insieme di operatori   su relazioni   che producono relazioni   e possono essere composti

Page 8: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 8

Operatori dell'algebra relazionale

  unione, intersezione, differenza   ridenominazione   selezione   proiezione   join (join naturale, prodotto cartesiano)

Page 9: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 9

Operatori insiemistici

  le relazioni sono insiemi   i risultati debbono essere relazioni   è possibile applicare unione,

intersezione, differenza solo a relazioni definite sugli stessi attributi

Page 10: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 10

Laureati Matricola

7432 9824

Età

54 45

Nome

Neri Verdi

7274 42 Rossi

Quadri Matricola

7432 9824

9297 Età

54 45

33 Nome

Neri Verdi

Neri

Laureati ∪ Quadri Matricola Età Nome

7432 54 Neri 9824 45 Verdi 9297 33 Neri

7274 42 Rossi 7432 54 Neri 9824 45 Verdi

7274 42 Rossi 7432 54 Neri 9824 45 Verdi 9297 33 Neri

7432 54 Neri 9824 45 Verdi 9297 33 Neri

7274 42 Rossi

Unione

Page 11: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 11

Laureati Matricola

7432 9824

Età

54 45

Nome

Neri Verdi

7274 42 Rossi

Quadri Matricola

7432 9824

9297 Età

54 45

33 Nome

Neri Verdi

Neri

Laureati ∩ Quadri

Matricola Età Nome 7432 54 Neri 9824 45 Verdi

7432 54 Neri 9824 45 Verdi

7432 54 Neri 9824 45 Verdi

7432 54 Neri 9824 45 Verdi

Intersezione

Page 12: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 12

Laureati Matricola Età Nome

7432 54 Neri 9824 45 Verdi

7274 42 Rossi

Quadri Matricola

7432 9824

9297 Età

54 45

33 Nome

Neri Verdi

Neri

Laureati – Quadri

Matricola Età Nome

7432 54 Neri 9824 45 Verdi

7274 42 Rossi 7432 54 Neri 9824 45 Verdi

7274 42 Rossi

Differenza

Page 13: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 13

Paternità Padre Figlio

Adamo Caino Abramo Isacco

Adamo Abele

Maternità Madre Figlio

Eva Set Sara Isacco

Eva Abele

Paternità ∪ Maternità ??

Una unione sensata ma impossibile

Page 14: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 14

Ridenominazione

  operatore monadico (con un argomento)

  "modifica lo schema" lasciando inalterata l'istanza dell'operando

Page 15: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 15

Paternità Padre Figlio

Adamo Caino Abramo Isacco

Adamo Abele

REN Genitore ← Padre (Paternità) Padre Figlio

Adamo Caino Abramo Isacco

Adamo Abele Genitore

Page 16: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 16

Paternità Padre Figlio

Adamo Caino Abramo Isacco

Adamo Abele

Maternità Madre Figlio

Eva Set Sara Isacco

Eva Abele

RENGenitore ← Padre (Paternità)

RENGenitore ← Madre (Maternità)

Genitore Figlio

Adamo Caino Abramo Isacco

Adamo Abele

Genitore Figlio

Eva Set Sara Isacco

Eva Abele

Page 17: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 17

RENGenitore ← Padre (Paternità)

RENGenitore ← Madre (Maternità)

Genitore Figlio

Adamo Caino Abramo Isacco

Adamo Abele

Genitore Figlio

Eva Set Sara Isacco

Eva Abele

Genitore Figlio

Adamo Caino Abramo Isacco

Adamo Abele

Eva Set Sara Isacco

Eva Abele

RENGenitore ← Padre (Paternità)

RENGenitore ← Madre (Maternità) ∪

Page 18: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 18

REN Sede, Retribuzione ← Ufficio, Stipendio (Impiegati) REN Sede, Retribuzione ← Fabbrica, Salario (Operai) ∪

Impiegati Cognome

Neri Rossi

Ufficio

Milano Roma

Stipendio

64 55

Operai Cognome

Verdi Bruni

Fabbrica

Latina Monza

Salario

55 45

Cognome Retribuzione Sede

Neri Rossi

64 55

Milano Roma

Verdi Bruni

Latina Monza

55 45

Page 19: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 19

Selezione

  operatore monadico (con un argomento)

  produce un risultato che   ha lo stesso schema dell'operando   contiene un sottoinsieme delle ennuple

dell'operando,   quelle che soddisfano una condizione

Page 20: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 20

Impiegati Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

  impiegati che   guadagnano più di 50   guadagnano più di 50 e lavorano a Milano   hanno lo stesso nome della filiale presso cui

lavorano

Page 21: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 21

Selezione, sintassi e semantica

  sintassi SEL Condizione (Operando)

  Condizione: espressione booleana (come quelle dei vincoli di ennupla)

  semantica   il risultato contiene le ennuple

dell'operando che soddisfano la condizione

Page 22: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 22

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

Impiegati

Milano Milano 44 9553 Neri Napoli 64 5698

  impiegati che guadagnano più di 50

SELStipendio > 50 (Impiegati)

Page 23: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 23

Impiegati Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

  impiegati che guadagnano più di 50 e lavorano a Milano

SELStipendio > 50 AND Filiale = 'Milano' (Impiegati)

Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

Neri Milano 64 5998

Page 24: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 24

Impiegati Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

  impiegati che hanno lo stesso nome della filiale presso cui lavorano

SEL Cognome = Filiale(Impiegati)

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698

Milano Milano 44 9553

Page 25: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 25

Selezione con valori nulli

Cognome Filiale Età Matricola

Neri Milano 45 5998 Rossi Roma 32 7309

Bruni Milano NULL 9553

Impiegati

SEL Età > 40 (Impiegati)

•  la condizione atomica è vera solo per valori non nulli

Page 26: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 26

Un risultato non desiderabile SEL Età>30 (Impiegati) ∪ SEL Età≤30 (Impiegati) ≠

Impiegati   Perché? Perché le selezioni vengono valutate

separatamente!   Ma anche

SEL Età>30 ∨ Età≤30 (Impiegati) ≠ Impiegati   Perché? Perché anche le condizioni atomiche

vengono valutate separatamente!

Page 27: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 27

SEL Età > 40 (Impiegati)   la condizione atomica è vera solo per

valori non nulli   per riferirsi ai valori nulli esistono forme

apposite di condizioni: IS NULL

IS NOT NULL   si potrebbe usare (ma non serve) una

"logica a tre valori" (vero, falso, sconosciuto)

Page 28: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 28

  A questo punto: SEL Età>30 (Impiegati) ∪ SEL Età≤30

(Impiegati) ∪ SEL Età IS NULL (Impiegati) =

SEL Età>30 ∨ Età ≤ 30 ∨ Età IS NULL (Impiegati) =

Impiegati

Page 29: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 29

Cognome Filiale Età Matricola

Neri Milano 45 5998 Rossi Roma 32 7309

Bruni Milano NULL 9553

Impiegati

Neri Milano 45 5998 Bruni Milano NULL 9553

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

Neri Milano 45 5998 Bruni Milano NULL 9553

Page 30: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 30

Selezione in SQL

select * from Impiegati where Stipendio > 30

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

Impiegati

Milano Milano 44 9553 Neri Napoli 64 5698

SELStipendio > 50 (Impiegati) select Matricola, Cognome, Filiale, Stipendio from Impiegati where Stipendio > 30

Page 31: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 31

Selezione in SQL

select * from Impiegati where Stipendio>30 AND Filiale= “Roma“

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

Impiegati

SEL(Stipendio > 50) AND (Filiale=“Roma”) (Impiegati)

Page 32: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 32

Selezione in SQL

select * from Impiegati where eta >40 OR eta is NULL

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

Page 33: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 33

Ridenominazione in SQL

select Matricola AS Codice, Cognome, Filiale, Stipendio

from Impiegati

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553

Impiegati

REN(Codice ← Matricola) (Impiegati)

Page 34: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 34

Selezione e proiezione

  operatori "ortogonali"   selezione:

  decomposizione orizzontale

  proiezione:   decomposizione verticale

Page 35: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 35

selezione

proiezione

Page 36: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 36

Proiezione

  operatore monadico   produce un risultato che

  ha parte degli attributi dell'operando   contiene ennuple cui contribuiscono tutte

le ennuple dell'operando

Page 37: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 37

Impiegati Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Neri Napoli 55 7309

Rossi Roma 64 5698 Rossi Roma 44 9553

  per tutti gli impiegati:   matricola e cognome   cognome e filiale

Page 38: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 38

Proiezione, sintassi e semantica

  sintassi PROJ ListaAttributi (Operando)

  semantica   il risultato contiene le ennuple ottenute da

tutte le ennuple dell'operando ristrette agli attributi nella lista

Page 39: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 39

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Neri Napoli 55 7309

Rossi Roma 64 5698 Rossi Roma 44 9553

  Matricola e Cognome di tutti gli impiegati

PROJ Matricola, Cognome (Impiegati)

Page 40: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 40

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Neri Napoli 55 7309

Rossi Roma 64 5698 Rossi Roma 44 9553

  Cognome e Filiale di tutti gli impiegati

PROJ Cognome, Filiale (Impiegati)

Page 41: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 41

Cardinalità delle proiezioni

  una proiezione   contiene al più tante ennuple quante

l'operando   può contenerne di meno

  se X è una superchiave di R, allora PROJX(R) contiene esattamente tante ennuple quante R

Page 42: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 42

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Neri Napoli 55 7309

Rossi Roma 64 5698 Rossi Roma 44 9553

  Query SQL: Matricola e Cognome di tutti gli impiegati

PROJ Matricola, Cognome (Impiegati)

SELECT Matricola, Cognome FROM Impiegati

Page 43: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 43

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Neri Napoli 55 7309

Rossi Roma 64 5698 Rossi Roma 44 9553

  Cognome e Filiale di tutti gli impiegati

PROJ Cognome, Filiale (Impiegati)

SELECT Cognome, Filiale FROM Impiegati

Page 44: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 44

Selezione e proiezione

  Combinando selezione e proiezione, possiamo estrarre interessanti informazioni da una relazione

Page 45: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 45

Cognome Filiale Stipendio Matricola

Neri Milano 64 5998 Rossi Roma 55 7309

Neri Napoli 64 5698 Milano Milano 44 9553 Milano Milano 44 9553 Neri Napoli 64 5698

  Matricola e Cognome degli impiegati che guadagnano più di 50

SELStipendio > 50 (Impiegati) PROJMatricola,Cognome ( )

SELECT Matricola, Cognome FROM Impiegati WHERE Stipendio>50

Page 46: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 46

Esercizi

  Matricola e Cognome degli Impiegati della Filiale di Milano con Stipendio maggiore di 60

  Matricola (ridenominata a Codice) e Stipendio degli Impiegati della Filiale di Roma.

Page 47: Linguaggi per basi di dati e SQL - Unical...SQL (Structured Query Language): parzialmente dichiarativo (reale) QBE (Query by Example): dichiarativo (reale) 8-12-2011 5 SQL Structured

8-12-2011 47

Considerazioni   Combinando selezione e proiezione,

possiamo estrarre informazioni da una relazione

  non possiamo però correlare informazioni presenti in relazioni diverse