C4 Sql1

28
Basi di Dati Interrogazioni in SQL

description

 

Transcript of C4 Sql1

Page 1: C4 Sql1

Basi di Dati

Interrogazioni in SQL

Page 2: C4 Sql1

Basi di Dati – Dove ci troviamo?

C) Modello Relazionale, Algebra relazionale, SQL

1 2 3 4 5 6 7

E) Tecnologia di un DBMS

1 2 3 4 5 6

A) Introduzione

1 2

B) Prog. Concettuale (ER)

1 2 3 4 5 6 7

D) Prog. Logica e Normalizzazione

1 2 3 4

F) Programmazione DB

1 2

2 SQL1

Page 3: C4 Sql1

Dichiaratività di SQL

SQL13

In SQL l'utente specifica QUALE informazione è di suo interesse ma non COME estrarla dai dati

Il sistema costruisce una strategia di accesso (QUERYOPTIMIZATION)

È l'aspetto più qualificante delle basi di dati relazionali

Page 4: C4 Sql1

Struttura di SQL

SQL14

Basata sulla composizione di blocchiSELECTFROMWHERE

Ogni blocco ha il potere espressivo di una qualunque combinazione di selezioni, proiezioni e join

Page 5: C4 Sql1

Esempio: gestione degli esami universitari 

SQL15

studente

MATR

123

415

702

NOME

Carlo

Paola

Antonio

CITTA’

Bologna

Torino

Roma

C-DIP

Inf

Inf

Logesame

MATR

123

123

702

COD-CORSO

1

2

2

DATA

2004-09-07

2005-01-08

2004-09-07

VOTO

30

28

20

corso

COD-CORSO

1

2

TITOLO

matematica

informatica

DOCENTE

Barozzi

Natali

Page 6: C4 Sql1

MATR

123

415

702

NOME

Carlo

Paola

Antonio

CITTA’

Bologna

Torino

Roma

C-DIP

Inf

Inf

Log

Interrogazioni semplici

SQL16

SELECT *FROM STUDENTE

SELECT *FROM STUDENTEWHERE C-DIP = 'Log'

MATR

702

NOME

Antonio

CITTA’

Roma

C-DIP

Log

Page 7: C4 Sql1

Sintassi nella clausola SELECT 

SQL17

SELECT *

SELECT NOME, CITTÀ 

SELECT DISTINCT  CITTÀ

SELECT CITTÀ AS LUOGO‐DI‐RESIDENZA

SELECT REDDITO‐CATASTALE * 0.05 AS TASSA‐ICI

SELECT  SUM (SALARIO)

Page 8: C4 Sql1

Sintassi della clausola FROM

SQL18

FROM STUDENTE

FROM STUDENTE AS X 

FROM STUDENTE   X

FROM STUDENTE, ESAME 

FROM STUDENTE JOIN ESAME ON STUDENTE.MATR=ESAME.MATR

Page 9: C4 Sql1

Sintassi del predicato di selezione 

Espressione booleana di predicati semplici

SQL19

operazioni booleane : AND (P1 AND P2)OR (P1 OR P2) NOT (NOT P1)

predicati semplici : TRUE, FALSE termine comparatore termine

comparatore : =, !=, <, <=, >, >=

termine : costante, attributoespressione aritmetica di costanti e attributi

Page 10: C4 Sql1

Sintassi della clausola WHERE

SQL110

Espressione Booleana di predicati semplici (come in algebra)

Alcuni predicati aggiuntivi:BETWEEN:

DATA BETWEEN 1997‐01‐01 AND 2006‐12‐31

LIKE: C‐DIP LIKE 'log%'

TARGA LIKE 'MI_777_8%'

Page 11: C4 Sql1

Sintassi della clausola WHERE

SQL111

WHERE NOME LIKE ‘B%’BOFFIBUCCHIBIANCHIBIFFIBONFATTI

WHERE NOME LIKE ‘BI%’BIANCHIBIFFI

Operatori aritmetici nel WHERE:WHERE SALARIO + STRAORD >18WHERE STRAORD + 5 > SALARIO

Page 12: C4 Sql1

Selezione 

SQL112

SELECT *FROM STUDENTEWHERE NOME='Paola‘

Il risultato è una tabella (priva di nome) con schema: lo stesso schema di STUDENTE

istanze :  le tuple di STUDENTE che soddisfano il predicato di selezione

MATR

415

NOME

Paola

CITTA’

Torino

C-DIP

Inf

Page 13: C4 Sql1

Esempio di selezione

SQL113

SELECT *FROM STUDENTEWHERE  (CITTÀ='Torino') OR  ((CITTÀ='Roma') AND NOT (C‐DIP='log'))

MATR

123

415

702

NOME

Carlo

Paola

Antonio

CITTÀ

Bologna

Torino

Roma

C-DIP

Inf

Inf

Log

Page 14: C4 Sql1

Gestione duplicati (proiezione)

SQL114

SELECT DISTINCT C-DIP FROM STUDENTE

SELECT C-DIP FROM STUDENTE

C-DIP

Inf

Log

C-DIP

Inf

Inf

Log

Page 15: C4 Sql1

Valori nulli 

SQL115

SELECT *FROM STUDENTEWHERE CITTÀ  IS  [NOT]  NULL

Attenzione : se CITTÀ ha valore NULL il risultato per (CITTÀ = 'Milano') ha valore 'UNKNOWN' 

Page 16: C4 Sql1

Composizione di predicati con valore nullo

SQL116

Logica a tre valori (V,F,U)

V AND U = UV OR U = V

F AND U = F F OR U = U

NOT U = U

P = (CITTÀ IS NOT NULL) AND (C-DIP LIKE '%Inf')

CITTA’

Milano

Milano

NULL

Milano

C-DIP

Inf

NULL

Inf

Log

P

V

U

F

F

TUPLA SELEZ.si

no

no

no

Page 17: C4 Sql1

JOIN su due tabelle

SQL117

SELECT NOMEFROM STUDENTE, ESAMEWHERE  STUDENTE.MATR = ESAME.MATRAND C‐DIP LIKE’In%’ AND VOTO = 30

Variante sintattica:

SELECT NOMEFROM STUDENTE JOIN ESAME

ON STUDENTE.MATR = ESAME.MATRWHERE C‐DIP LIKE ‘In%' AND VOTO = 30

NOME

Carlo

Page 18: C4 Sql1

Join con tre tabelle

SQL118

SELECT NOMEFROM STUDENTE, ESAME, CORSOWHERE  STUDENTE.MATR = ESAME.MATRAND CORSO.COD‐CORSO = ESAME.COD‐CORSOAND TITOLO LIKE ‘info%’ AND VOTO < 24

NOME

Antonio

Page 19: C4 Sql1

Interrogazioni con variabili relazionali

SQL119

Es: chi sono i dipendenti “non‐pendolari”?impiegatoMATR

1

2

3

….

NOME

Piero

Giorgio

Giovanni

…..

CITTÀ

BO

MO

FE

….

SALARIO

1500 €

2000 €

1000 €

….

MATR-MGR

2

4

2

...dipartimento

DNO

1

2

...

NOME

AMMINISTRAZIONE

SPEDIZIONI

…..

CITTÀ

BO

FE

...

MATR-MGR

2

7

….

Page 20: C4 Sql1

Variabili relazionali

SQL120

SELECT X.NOMEFROM IMPIEGATO AS X, DIPARTIMENTO AS YWHERE X.MATR-MGR = Y.MATR_MGR

AND Y.CITTÀ = X.CITTÀ

X.NOMEPiero

AND Y.CITTÀ != X.CITTÀ

X.NOMEGiovanni

Page 21: C4 Sql1

Variabili relazionali (self‐join) 

SQL121

Es: Chi sono i dipendenti di Giorgio?

SELECT  X.NOMEFROM IMPIEGATO AS X, IMPIEGATO AS YWHERE  X.MATR‐MGR = Y.MATRAND Y.NOME = ‘Giorgio’

X.NOMEPieroGiovanni

Page 22: C4 Sql1

Blocchi SQL per la modifica  

SQL122

Tre operazioni elementari:Cancellazione: DELETEinserimento:  INSERT modifica: UPDATE

CancellazioneDELETE FROM STUDENTE WHERE MATR = '678678'

Page 23: C4 Sql1

Inserimento

SQL123

INSERT INTO STUDENTEVALUES ('456878', 'Giorgio Rossi', 'Bologna', 'Logistica e Produzione') 

INSERT INTO BOLOGNESI( SELECT *

FROM STUDENTEWHERE CITTÀ = 'Bologna‘

)

Page 24: C4 Sql1

Modifica

SQL124

UPDATE ESAMESET VOTO = 30WHERE DATA = 2004‐04‐01

UPDATE ESAMESET VOTO = VOTO + 1WHERE MATR = '787989'

Page 25: C4 Sql1

Esercizi

SQL125

Dato un DB per la gestione del personale esprimere in SQL le interrogazioni seguenti:

in quali tipi di progetti lavora Giovanni?chi è il manager di Piero?in quali progetti lavora Piero?quali impiegati lavorano nel progetto “IDEA”?quali impiegati lavorano al 100% del loro tempo nel progetto “WIDE”?

E le modifiche:inserire la tupla <4,Luca,2004‐01‐01,2M,1>modificare il salario di Piero in 3000€aumentare il salario di Giorgio del 5%cancellare i dati di Giovanni

Page 26: C4 Sql1

Esempio : gestione personale 

SQL126

impiegato

MATR

1

2

3

NOME

Piero

Giorgio

Giovanni

DATA-ASS

2002-01-01

2004-01-01

2003-07-01

SALARIO

1500 €

2000 €

1000 €

assegnamento

MATR

1

1

2

3

NUM-PROG

3

4

3

4

PERC

50

50

100

100

progetto

TITOLO

Idea

Wide

TIPO

Esprit

Esprit

MATR-MGR

2

null

2

NUM-PROG

3

4

Page 27: C4 Sql1

Esercizi  

SQL127

• in quali tipi di progetti lavora Giovanni?SELECT TIPO FROM IMPIEGATO AS I,

ASSEGNAMENTO AS A, PROGETTO AS P

WHERE I.MATR=A.MATRAND A.NUM-PROG=P.NUM-PROGAND NOME='Giovanni'

TIPO

Esprit

• chi è il manager di Piero?SELECT Y.NOME FROM IMPIEGATO AS X, IMPIEGATO AS Y WHERE X.MATR-MGR=Y.MATR

AND X.NOME='Piero'

NOME

Giorgio

Page 28: C4 Sql1

Esercizi  

SQL128

• modificare il salario di Piero in 3000 €UPDATE IMPIEGATOSET SALARIO = 3000WHERE NOME='Piero'

• aumentare il salario di Giorgio del 5%UPDATE IMPIEGATOSET SALARIO = SALARIO * 1.05WHERE NOME='Giorgio'