Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano...

128
D B M G Linguaggio SQL: fondamenti

Transcript of Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano...

Page 1: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Linguaggio SQL: fondamenti

Page 2: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Istruzione SELECT: fondamenti

Cenni di algebra relazionale

Struttura di base

Clausola WHERE

Ordinamento del risultato

Join

Funzioni aggregate

Operatore GROUP BY

2

Page 3: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 3

Algebra relazionale

Estende l’algebra degli insiemi per il modello relazionale

Definisce un insieme di operatori che operano su relazioni e producono come risultato una relazione

Gode della proprietà di chiusura

il risultato di qualunque operazione algebrica su relazioni è a sua volta una relazione

Page 4: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 4

Operatori dell’algebra relazionale

Operatori unari

selezione (s)

proiezione (p)

Operatori binari

prodotto cartesiano ()

join ( )

unione ()

intersezione ()

differenza (-)

divisione (/)

Page 5: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 5

Operatori dell’algebra relazionale

Operatori insiemistici

unione ()

intersezione ()

differenza (-)

prodotto cartesiano ()

Operatori relazionali

selezione (s)

proiezione (p)

join ( )

divisione (/)

Page 6: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 6

Relazioni d’esempio

Codice NomeCorso Semestre MatrDocente

M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102

Corsi

Docenti MatrDocente NomeDoc Dipartimento

D102 Verdi Informatica

D105 Neri Informatica

D104 Bianchi Elettronica

Page 7: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 7

Selezione

La selezione estrae un sottoinsieme “orizzontale”della relazione

opera una decomposizione orizzontale della relazione

Page 8: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 8

Selezione: esempio

Trovare i corsi tenuti nel secondo semestre

Page 9: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 9

Selezione: esempio

Codice NomeCorso Semestre MatrDocente

M4880 Sistemi digitali 2 D104

F0410 Basi di dati 2 D102

R

Codice NomeCorso Semestre MatrDocente

M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102

Corsi

Page 10: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 10

Proiezione

La proiezione estrae un sottoinsieme “verticale”della relazione

opera una decomposizione verticale della relazione

Page 11: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 11

Proiezione: esempio

Trovare il nome dei docenti

Page 12: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 12

R NomeDoc

Verdi

Neri

Bianchi

Docenti MatrDocente NomeDoc Dipartimento

D102 Verdi Informatica

D105 Neri Informatica

D104 Bianchi Elettronica

Proiezione: esempio

Page 13: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 13

Selezione+proiezione: esempio

Selezionare il nome dei corsi nel secondo semestre

Page 14: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Selezione+proiezione: esempio

Codice NomeCorso Semestre MatrDocente

M4880 Sistemi digitali 2 D104

F0410 Basi di dati 2 D102

Selezione

Codice NomeCorso Semestre MatrDocente

M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102

Corsi

Page 15: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 15

Selezione+proiezione: esempio

NomeCorso

Sistemi digitali

Basi di dati

Proiezione

R

Codice NomeCorso Semestre MatrDocente

M4880 Sistemi digitali 2 D104

F0410 Basi di dati 2 D102

Page 16: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Istruzione SELECT: esempio

Trovare il codice e il numero di soci dei fornitori di Milano

16

Page 17: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

BD forniture prodotti

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

F

FPCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino

P

17

Page 18: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Istruzione SELECT: esempio

Trovare il codice e il numero di soci dei fornitori di Milano

FCodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

18

Page 19: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Istruzione SELECT: esempio

Trovare il codice e il numero di soci dei fornitori di Milano

F

CodF NSoci

F2 1

F3 3

R

SELECT CodF, NSoci

FROM F

WHERE Sede='Milano';

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

19

Page 20: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

SELECT base (n.1)

P

SELECT CodP

FROM P;

Trovare il codice di tutti i prodotti

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino

CodP

P1

P2

P3

P4

P5

P6

R

20

Page 21: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

SELECT base (n.2)

SELECT CodPFROM FP;

RCodP

P1

P2

P3

P4

P5

P6

P1

P2

P2

P3

P4

P5

Trovare il codice dei prodotti forniti da almeno un fornitore

FPCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 40021

Page 22: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Eliminazione dei duplicati

Parola chiave DISTINCT

eliminazione dei duplicati

Trovare il codice dei prodotti diversi forniti da almeno un fornitore

22

Page 23: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

SELECT base (n.2)

SELECT DISTINCT CodPFROM FP;

FPCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

RCodP

P1

P2

P3

P4

P5

P6

Trovare il codice dei prodotti diversi forniti da almeno un fornitore

23

Page 24: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Selezione di tutte le informazioni

R

Trovare tutte le informazioni sui prodotti

oppureSELECT *FROM P;

SELECT CodP, NomeP, Colore, Taglia, MagazzinoFROM P;

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino 24

Page 25: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Selezione con espressione (1/3)

SELECT CodP, Taglia-14FROM P;

PCodP

P1 26

P2 34

P3 34

P4 30

P5 26

P6 28

R

Trovare il codice dei prodotti e la taglia espressa con la misura americana

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino

25

Page 26: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Selezione con espressione (2/3)

Definizione di una nuova colonna temporaneaper l’espressione calcolata

il nome della colonna temporanea può essere definito con la parola chiave AS

26

Page 27: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Selezione con espressione (3/3)

SELECT CodP, Taglia-14 AS TagliaUSAFROM P;

CodP TagliaUSA

P1 26

P2 34

P3 34

P4 30

P5 26

P6 28

R

Trovare il codice dei prodotti e la taglia espressa con la misura americana

27

Page 28: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Struttura dell’istruzione SELECT (1)

SELECT [DISTINCT] ElencoAttributiDaVisualizzare

FROM ElencoTabelleDaUtilizzare;

28

Page 29: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Clausola WHERE

Permette di esprimere condizioni di selezione applicate singolarmente ad ogni tupla

Espressione booleana di predicati

Predicati semplici

espressioni di confronto tra attributi e costanti

ricerca testuale

valori NULL

29

Page 30: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Clausola WHERE (n.1)

Trovare il codice dei fornitori di Milano

SELECT CodF

FROM F

WHERE Sede='Milano';

F

CodF

F2

F3

RCodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

30

Page 31: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Clausola WHERE (n.2)

F

CodF NSoci

F1 2

F4 2

F5 3

R

SELECT CodF, NSoci

FROM F

WHERE Sede<>'Milano';

Trovare il codice e il numero di soci dei fornitori che non hanno sede a Milano

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

31

Page 32: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Espressioni booleane (n.1)

SELECT CodF

FROM F

WHERE Sede='Milano' AND NSoci>2;

F

CodF

F3

R

Trovare il codice dei fornitori di Milano con più di 2 soci

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

32

Page 33: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Espressioni booleane (n.2)

CodF NSoci

F1 2

F2 1

F3 3

F4 2

R

SELECT CodF, NSoci

FROM F

WHERE Sede='Milano' OR Sede='Torino';

Trovare il codice e il numero di soci dei fornitori di Milano o di Torino

F

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia33

Page 34: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Espressioni booleane (n.3)

Trovare il codice e il numero di soci dei fornitori che hanno sede a Milano e a Torino

la richiesta non può essere soddisfatta

ogni fornitore ha una sola sede

F

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia34

Page 35: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca testuale

NomeAttributo LIKE StringaDiCaratteri

il carattere _ rappresenta un singolo carattere qualsiasi (obbligatoriamente presente)

il carattere % rappresenta una sequenza qualsiasi di n caratteri (anche vuota)

Operatore LIKE

35

Page 36: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca testuale (n.1)

SELECT CodP, NomePFROM PWHERE NomeP LIKE 'C%';

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino

P

CodP NomeP

P3 Camicia

P4 Camicia

R

Trovare il codice e il nome dei prodotti il cui nome inizia con la lettera C

36

Page 37: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca testuale (n.2)

Indirizzo LIKE '%Torino%'

L’attributo Indirizzo contiene la stringa ‘Torino’

37

Page 38: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca testuale (n.3)

CodF LIKE '_2'

Il codice fornitore è pari a 2 e

è preceduto da un carattere ignoto

è costituito esattamente da 2 caratteri

38

Page 39: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca testuale (n.4)

Magazzino NOT LIKE '_e%'

L’attributo magazzino non contiene una ‘e’ in seconda posizione

39

Page 40: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Gestione di valori NULL (n.1)

CodP NomeP

P2 Jeans

P3 Camicia

R

SELECT CodP, NomeP

FROM P

WHERE Taglia>44;

P

Trovare il codice e il nome dei prodotti con taglia maggiore di 44

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu NULL Milano

P6 Bermuda Rosso 42 Torino

40

Page 41: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Valore NULL

Le tuple per cui la taglia è NULL non sono selezionate

il predicato Taglia>44 è falso

In presenza di valori NULL qualsiasi predicato di confronto è falso

41

Page 42: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca di valori NULL

Operatore speciale IS

NomeAttributo IS [NOT] NULL

42

Page 43: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca di valori NULL (n.1)

CodP NomeP

P5 Gonna

R

SELECT CodP, NomeP

FROM P

WHERE Taglia IS NULL;P

Trovare il codice e il nome dei prodotti per cui la taglia non è indicata

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu NULL Milano

P6 Bermuda Rosso 42 Torino

43

Page 44: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ricerca di valori NULL (n.2)

CodP NomeP

P2 Jeans

P3 Camicia

P5 Gonna

R

SELECT CodP, NomeP

FROM P

WHERE Taglia>44 OR Taglia IS NULL;

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu NULL Milano

P6 Bermuda Rosso 42 Torino

P

Trovare il codice e il nome dei prodotti con la taglia maggiore di 44 o che potrebbero avere taglia maggiore di 44

44

Page 45: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Struttura dell’istruzione SELECT (2)

SELECT [DISTINCT] ElencoAttributiDaVisualizzare

FROM ElencoTabelleDaUtilizzare

[WHERE CondizioniDiTupla ];

45

Page 46: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ordinamento del risultato (n.1)

SELECT CodP, TagliaFROM PORDER BY Taglia DESC;

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino

PCodP Taglia

P2 48

P3 48

P4 44

P6 42

P1 40

P5 40

R

Trovare il codice dei prodotti e la loro taglia ordinando il risultato in ordine decrescente di taglia

46

Page 47: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ordinamento

Clausola ORDER BY

ORDER BY NomeAttributo [ASC | DESC]

{, NomeAttributo [ASC | DESC]}

l’ordinamento implicito è crescente

senza ASC

gli attributi di ordinamento devono comparire nella clausola SELECT

anche implicitamente (come SELECT *)

47

Page 48: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ordinamento del risultato (n.2)

SELECT CodP, NomeP, Colore, Taglia, MagazzinoFROM PORDER BY NomeP, Taglia DESC;

CodP NomeP Colore Taglia Magazzino

P6 Bermuda Rosso 42 Torino

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P2 Jeans Verde 48 Milano

P1 Maglia Rosso 40 Torino

R

Trovare tutte le informazioni sui prodotti ordinando il risultato in ordine crescente di nome e decrescente di taglia

48

Page 49: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ordinamento del risultato (n.2)

SELECT *FROM PORDER BY NomeP, Taglia DESC;

R

Trovare tutte le informazioni sui prodotti ordinando il risultato in ordine crescente di nome e decrescente di taglia

CodP NomeP Colore Taglia Magazzino

P6 Bermuda Rosso 42 Torino

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P2 Jeans Verde 48 Milano

P1 Maglia Rosso 40 Torino49

Page 50: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Ordinamento del risultato (n.3)

SELECT CodP, Taglia-14 AS TagliaUSAFROM PORDER BY TagliaUSA;

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino

PCodP TagliaUSA

P5 26

P1 28

P6 28

P4 30

P2 34

P3 34

R

Trovare il codice dei prodotti e la taglia espressa come taglia americana, ordinando il risultato in ordine crescente di taglia

50

Page 51: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Struttura dell’istruzione SELECT (3)

SELECT [DISTINCT] ElencoAttributiDaVisualizzare

FROM ElencoTabelleDaUtilizzare

[WHERE CondizioniDiTupla ]

[ORDER BY ElencoAttributiDiOrdinamento ];

51

Page 52: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

Trovare il nome dei fornitori che forniscono il prodotto P2

Occorrono 2 tabelle, F e FP

52

Page 53: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

DB forniture prodotti

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

F

FPCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

53

Page 54: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 54

Prodotto cartesiano

Il prodotto cartesiano di due relazioni A e B genera tutte le coppie formate da una tupla di A e una tupla di B

Page 55: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 55

Prodotto cartesiano: esempio

Trovare il prodotto cartesiano tra Corsi e Docenti

Page 56: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 56

Prodotto cartesiano: esempio

Codice NomeCorso Semestre MatrDocente

M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102

Corsi

Docenti MatrDocente NomeDoc Dipartimento

D102 Verdi Informatica

D105 Neri Informatica

D104 Bianchi Elettronica

Page 57: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 57

Prodotto cartesiano: esempio

Corsi.

Codice

Corsi.

NomeCorso

Corsi.

Semestre

Corsi.

MatrDocente

Docenti.

MatrDocente

Docenti.

NomeDoc

Docenti.

Dipartimento

M2170 Informatica 1 1 D102 D102 Verdi Informatica

M2170 Informatica 1 1 D102 D105 Neri Informatica

M2170 Informatica 1 1 D102 D104 Bianchi Elettronica

M4880 Sistemi digitali 2 D104 D102 Verdi Informatica

M4880 Sistemi digitali 2 D104 D105 Neri Informatica

M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica

F1401 Elettronica 1 D104 D102 Verdi Informatica

F1401 Elettronica 1 D104 D105 Neri Informatica

F1401 Elettronica 1 D104 D104 Bianchi Elettronica

F0410 Basi di dati 2 D102 D102 Verdi Informatica

F0410 Basi di dati 2 D102 D105 Neri Informatica

F0410 Basi di dati 2 D102 D104 Bianchi Elettronica

R

Page 58: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 58

Legame tra attributi

Corsi.

Codice

Corsi.

NomeCorso

Corsi.

Semestre

Corsi.

MatrDocente

Docenti.

MatrDocente

Docenti.

NomeDoc

Docenti.

Dipartimento

M2170 Informatica 1 1 D102 D102 Verdi Informatica

M2170 Informatica 1 1 D102 D105 Neri Informatica

M2170 Informatica 1 1 D102 D104 Bianchi Elettronica

M4880 Sistemi digitali 2 D104 D102 Verdi Informatica

M4880 Sistemi digitali 2 D104 D105 Neri Informatica

M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica

F1401 Elettronica 1 D104 D102 Verdi Informatica

F1401 Elettronica 1 D104 D105 Neri Informatica

F1401 Elettronica 1 D104 D104 Bianchi Elettronica

F0410 Basi di dati 2 D102 D102 Verdi Informatica

F0410 Basi di dati 2 D102 D105 Neri Informatica

F0410 Basi di dati 2 D102 D104 Bianchi Elettronica

R

Page 59: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 59

Join

Il join di due relazioni A e B genera tutte le coppie formate da una tupla di A e una tupla di B “semanticamente legate”

Page 60: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 60

Join: esempio

Trovare le informazioni sui corsi e sui docenti che li tengono

Page 61: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 61

Join: esempio

Corsi.

Codice

Corsi.

NomeCorso

Corsi.

Semestre

Corsi.

MatrDocente

Docenti.

MatrDocente

Docenti.

NomeDoc

Docenti.

Dipartimento

M2170 Informatica 1 1 D102 D102 Verdi Informatica

M2170 Informatica 1 1 D102 D105 Neri Informatica

M2170 Informatica 1 1 D102 D104 Bianchi Elettronica

M4880 Sistemi digitali 2 D104 D102 Verdi Informatica

M4880 Sistemi digitali 2 D104 D105 Neri Informatica

M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica

F1401 Elettronica 1 D104 D102 Verdi Informatica

F1401 Elettronica 1 D104 D105 Neri Informatica

F1401 Elettronica 1 D104 D104 Bianchi Elettronica

F0410 Basi di dati 2 D102 D102 Verdi Informatica

F0410 Basi di dati 2 D102 D105 Neri Informatica

F0410 Basi di dati 2 D102 D104 Bianchi Elettronica

Page 62: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 62

Join: esempio

Nota bene: il docente (D105,Neri,Informatica), che non tiene alcun corso, non compare nel risultato del join

Corsi.

Codice

Corsi.

NomeCorso

Corsi.

Semestre

Corsi.

MatrDocente

Docenti.

MatrDocente

Docenti.

NomeDoc

Docenti.

Dipartimento

M2170 Informatica 1 1 D102 D102 Verdi Informatica

M4880 Sistemi digitali 2 D104 D104 Bianchi Elettronica

F1401 Elettronica 1 D104 D104 Bianchi Elettronica

F0410 Basi di dati 2 D102 D102 Verdi Informatica

R

Page 63: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 63

Join: definizione

Il join è un operatore derivato

può essere espresso utilizzando gli operatori prodotto cartesiano, selezione e proiezione

Il join è definito separatamente perché esprime sinteticamente molte operazioni ricorrenti nelle interrogazioni

Page 64: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 64

Theta-join

Il theta-join di due relazioni A e B genera tutte le coppie formate da una tupla di A e una tupla di B che soddisfano una generica “condizione di legame”

Page 65: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 65

Theta-join: esempio

Trovare la matricola dei docenti che sono titolari di almeno due corsi

Codice NomeCorso Semestre MatrDocente

M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102

Corsi

Page 66: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 66

Theta-join: esempio

Codice NomeCorso Semestre MatrDocente

M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102

Corsi C1

Codice NomeCorso Semestre MatrDocente

M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102

Corsi C2

Page 67: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Corsi C1.

Codice

Corsi C1.

NomeCorso

Corsi C1.

Semestre

Corsi C1.

MatrDocente

Corsi C2.

Codice

Corsi C2.

NomeCorso

Corsi C2.

Semestre

Corsi C2.

MatrDocente

M2170 Informatica 1 1 D102 M2170 Informatica 1 1 D102

M2170 Informatica 1 1 D102 M4880 Sistemi digitali 2 D104

M2170 Informatica 1 1 D102 F1401 Elettronica 1 D104

M2170 Informatica 1 1 D102 F0410 Basi di dati 2 D102

M4880 Sistemi digitali 2 D104 M2170 Informatica 1 1 D102

M4880 Sistemi digitali 2 D104 M4880 Sistemi digitali 2 D104

M4880 Sistemi digitali 2 D104 F1401 Elettronica 1 D104

M4880 Sistemi digitali 2 D104 F0410 Basi di dati 2 D102

F1401 Elettronica 1 D104 M2170 Informatica 1 1 D102

F1401 Elettronica 1 D104 M4880 Sistemi digitali 2 D104

F1401 Elettronica 1 D104 F1401 Elettronica 1 D104

F1401 Elettronica 1 D104 F0410 Basi di dati 2 D102

F0410 Basi di dati 2 D102 M2170 Informatica 1 1 D102

F0410 Basi di dati 2 D102 M4880 Sistemi digitali 2 D104

F0410 Basi di dati 2 D102 F1401 Elettronica 1 D104

F0410 Basi di dati 2 D102 F0410 Basi di dati 2 D102

Theta-join: esempio

Page 68: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 68

Theta-join: esempio

Corsi C1.

Codice

Corsi C1.

NomeCorso

Corsi C1.

Semestre

Corsi C1.

MatrDocente

Corsi C2.

Codice

Corsi C2.

NomeCorso

Corsi C2.

Semestre

Corsi C2.

MatrDocente

M2170 Informatica 1 1 D102 F0410 Basi di dati 2 D102

M4880 Sistemi digitali 2 D104 F1401 Elettronica 1 D104

F1401 Elettronica 1 D104 M4880 Sistemi digitali 2 D104

F0410 Basi di dati 2 D102 M2170 Informatica 1 1 D102

Page 69: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG 69

Theta-join: esempio

Corsi C1.

Codice

Corsi C1.

NomeCorso

Corsi C1.

Semestre

Corsi C1.

MatrDocente

Corsi C2.

Codice

Corsi C2.

NomeCorso

Corsi C2.

Semestre

Corsi C2.

MatrDocente

M2170 Informatica 1 1 D102 F0410 Basi di dati 2 D102

M4880 Sistemi digitali 2 D104 F1401 Elettronica 1 D104

F1401 Elettronica 1 D104 M4880 Sistemi digitali 2 D104

F0410 Basi di dati 2 D102 M2170 Informatica 1 1 D102

Corsi C1.

MatrDocente

D102

D104

R

Page 70: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Prodotto cartesiano

SELECT NomeF

FROM F, FP ;

Trovare il nome dei fornitori che forniscono il prodotto P2

70

Page 71: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Prodotto cartesiano

F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta

F1 Andrea 2 Torino F1 P1 300

F1 Andrea 2 Torino F1 P2 200

F1 Andrea 2 Torino F1 P3 400

F1 Andrea 2 Torino F1 P4 200

F1 Andrea 2 Torino F1 P5 100

F1 Andrea 2 Torino F1 P6 100

F1 Andrea 2 Torino F2 P1 300

… … … … … … …

F2 Luca 1 Milano F1 P1 300

… … … … … … …

F2 Luca 1 Milano F2 P1 300

… … … … … … …

71

Page 72: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta

F1 Andrea 2 Torino F1 P1 300

F1 Andrea 2 Torino F1 P2 200

F1 Andrea 2 Torino F1 P3 400

F1 Andrea 2 Torino F1 P4 200

F1 Andrea 2 Torino F1 P5 100

F1 Andrea 2 Torino F1 P6 100

F1 Andrea 2 Torino F2 P1 300

… … … … … … …

F2 Luca 1 Milano F1 P1 300

… … … … … … …

F2 Luca 1 Milano F2 P1 300

… … … … … … …

Join (n.1)

=

72

Page 73: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

SELECT NomeF

FROM F, FP

WHERE F.CodF=FP.CodF

NomeTabella.NomeAttributo

Trovare il nome dei fornitori che forniscono il prodotto P2

73

Page 74: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

SELECT NomeF

FROM F, FP

WHERE F.CodF=FP.CodF

Condizione di join

Trovare il nome dei fornitori che forniscono il prodotto P2

74

Page 75: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta

F1 Andrea 2 Torino F1 P1 300

F1 Andrea 2 Torino F1 P2 200

F1 Andrea 2 Torino F1 P3 400

F1 Andrea 2 Torino F1 P4 200

F1 Andrea 2 Torino F1 P5 100

F1 Andrea 2 Torino F1 P6 100

F2 Luca 1 Milano F2 P1 300

F2 Luca 1 Milano F2 P2 400

F3 Antonio 3 Milano F3 P2 200

F4 Gabriele 2 Torino F4 P3 200

F4 Gabriele 2 Torino F4 P4 300

F4 Gabriele 2 Torino F4 P5 400

75

Page 76: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

SELECT NomeF

FROM F, FP

WHERE F.CodF=FP.CodF AND

CodP='P2';

Trovare il nome dei fornitori che forniscono il prodotto P2

76

Page 77: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta

F1 Andrea 2 Torino F1 P1 300

F1 Andrea 2 Torino F1 P2 200

F1 Andrea 2 Torino F1 P3 400

F1 Andrea 2 Torino F1 P4 200

F1 Andrea 2 Torino F1 P5 100

F1 Andrea 2 Torino F1 P6 100

F2 Luca 1 Milano F2 P1 300

F2 Luca 1 Milano F2 P2 400

F3 Antonio 3 Milano F3 P2 200

F4 Gabriele 2 Torino F4 P3 200

F4 Gabriele 2 Torino F4 P4 300

F4 Gabriele 2 Torino F4 P5 400

FP.CodP='P2'

77

Page 78: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta

F1 Andrea 2 Torino F1 P2 200

F2 Luca 1 Milano F2 P2 400

F3 Antonio 3 Milano F3 P2 200

78

Page 79: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

NomeF

Andrea

Luca

Antonio

R

Trovare il nome dei fornitori che forniscono il prodotto P2

79

Page 80: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

SELECT NomeF

FROM F, FP

WHERE F.CodF=FP.CodF

AND CodP='P2';

SELECT NomeF

FROM F, FP

WHERE CodP='P2' AND

F.CodF=FP.CodF;

Il risultato e l’efficienza sono indipendenti dall’ordine dei predicati nella clausola WHERE

Trovare il nome dei fornitori che forniscono il prodotto P2

80

Page 81: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

SELECT NomeF

FROM F, FP

WHERE FP.CodF=F.CodF

AND CodP='P2';

SELECT NomeF

FROM FP, F

WHERE FP.CodF=F.CodF

AND CodP='P2';

Trovare il nome dei fornitori che forniscono il prodotto P2

Il risultato e l’efficienza sono indipendenti dall’ordine delle tabelle nella clausola FROM

81

Page 82: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.1)

Dichiaratività del linguaggio SQL

in algebra relazionale si definisce l’ordine in cui sono applicati gli operatori

in SQL l’ordine migliore è scelto dall’ottimizzatore indipendentemente

dall’ordine delle condizioni nella clausola WHERE

dall’ordine delle tabelle nella clausola FROM

82

Page 83: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.2)

Clausola FROM con N tabelle

almeno N-1 condizioni di join nella clausola WHERE

SELECT NomeF

FROM F, FP, P

WHERE F.CodF=FP.CodF AND P.CodP=FP.CodP

AND Colore='Rosso';

Trovare il nome dei fornitori che forniscono almeno un prodotto rosso

83

Page 84: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.3)

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

F AS FXCodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

F AS FY

SELECT FX.CodF, FY.CodF

FROM F AS FX, F AS FY

WHERE FX.Sede=FY.Sede;

Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città

84

Page 85: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.3)

RSELECT FX.CodF, FY.CodF

FROM F AS FX, F AS FY

WHERE FX.Sede=FY.Sede;

Sono presenti

coppie di valori uguali

permutazioni della stessa coppia di valori

Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città

FX.CodF

F1

F1

F2

F2

F3

F3

F4

F4

F5

FY.CodF

F1

F4

F2

F3

F2

F3

F1

F4

F5

85

Page 86: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.3)

RSELECT FX.CodF, FY.CodF

FROM F AS FX, F AS FY

WHERE FX.Sede=FY.Sede AND

FX.CodF <> FY.CodF;

Elimina le coppie di valori uguali

Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città

FX.CodF

F1

F1

F2

F2

F3

F3

F4

F4

F5

FY.CodF

F1

F4

F2

F3

F2

F3

F1

F4

F5

86

Page 87: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.3)

R

Elimina le permutazioni della stessa coppia di valori

Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città

FX.CodF

F1

F1

F2

F2

F3

F3

F4

F4

F5

FY.CodF

F1

F4

F2

F3

F2

F3

F1

F4

F5

SELECT FX.CodF, FY.CodF

FROM F AS FX, F AS FY

WHERE FX.Sede=FY.Sede AND

FX.CodF < FY.CodF;

87

Page 88: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Join (n.3)

R

Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città

FX.CodF

F1

F2

FY.CodF

F4

F3

SELECT FX.CodF, FY.CodF

FROM F AS FX, F AS FY

WHERE FX.Sede=FY.Sede AND

FX.CodF < FY.CodF;

88

Page 89: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzioni aggregate

Una funzione aggregata

opera su un insieme di valori

produce come risultato un unico valore (aggregato)

89

Page 90: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzioni aggregate

Funzioni aggregate disponibili in SQL-2

COUNT: conteggio degli elementi in un attributo

SUM: somma dei valori di un attributo

AVG: media dei valori di un attributo

MAX: massimo valore di un attributo

MIN: minimo valore di un attributo

90

Page 91: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzioni aggregate

Una funzione aggregata

opera su un insieme di valori

produce come risultato un unico valore (aggregato)

è indicata nella clausola SELECT

91

Page 92: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Struttura dell’istruzione SELECT (4)

SELECT ElencoFunzioniAggregateDaVisualizzare

FROM ElencoTabelleDaUtilizzare

[WHERE Condizioni DiTupla ]

[ORDER BY ElencoAttributiDiOrdinamento ];

92

Page 93: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzioni aggregate

Una funzione aggregata

opera su un insieme di valori

produce come risultato un unico valore (aggregato)

è indicata nella clausola SELECT

non si possono indicare anche attributi non aggregati

possono essere richieste più funzioni aggregate contemporaneamente

93

Page 94: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzione COUNT

COUNT (<*| [DISTINCT | ALL] ListaAttributi >)

Conteggio del numero di elementi di un insieme

righe di una tabella

valori (eventualmente distinti) di uno o più attributi

94

Page 95: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzione COUNT (n.1)

SELECT COUNT(*)

FROM F;

F

5

R

Trovare il numero di fornitori

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

95

Page 96: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzione COUNT (n.2)

SELECT COUNT(*)

FROM FP;

FP

12

R

Conta il numero di forniture, non di fornitori

Trovare il numero di fornitori che hanno almeno una fornitura

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 40096

Page 97: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzione COUNT (n.2)

SELECT COUNT(CodF)

FROM FP;

FP

Conta il numero di forniture, non di fornitori

Trovare il numero di fornitori che hanno almeno una fornitura

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

12

R

97

Page 98: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzione COUNT (n.2)

SELECT COUNT(DISTINCT CodF)

FROM FP;

R

Conta il numero di fornitori diversi

Trovare il numero di fornitori che hanno almeno una fornitura

4

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FP

98

Page 99: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzione COUNT

Se l’argomento della funzione è preceduto da DISTINCT, conta il numero di valori distinti dell’argomento

COUNT (<*| [DISTINCT | ALL] ListaAttributi >)

Conteggio del numero di elementi di un insieme

righe di una tabella

valori (eventualmente distinti) di uno o più attributi

99

Page 100: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzioni aggregate e WHERE

SELECT COUNT(*)

FROM FP

WHERE CodP='P2';

FP

3

R

Trovare il numero di fornitori che forniscono il prodotto P2

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

CodF CodP Qta

F1 P2 200

F2 P2 400

F3 P2 200

100

Page 101: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzioni aggregate e WHERE

Le funzioni aggregate sono valutate solo dopo l’applicazione di tutti i predicati nella clausola WHERE

101

Page 102: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzioni SUM, MAX, MIN, AVG

SUM, MAX, MIN e AVG

ammettono come argomento un attributo o un’espressione

SUM e AVG

ammettono solo attributi di tipo numerico o intervallo di tempo

MAX e MIN

richiedono che l’espressione sia ordinabile

possono essere applicate anche su stringhe di caratteri e istanti di tempo

102

Page 103: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Funzione SUM

SELECT SUM(Qta)

FROM FP

WHERE CodP='P2';

FPCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

CodF CodP Qta

F1 P2 200

F2 P2 400

F3 P2 200800

R

Trovare la quantità totale di pezzi forniti per il prodotto P2

103

Page 104: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

Per ogni prodotto, trovare la quantità totale di pezzi forniti

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FP

104

Page 105: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

Per ogni prodotto, trovare la quantità totale di pezzi forniti

FPCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FP

105

Page 106: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

FPFP

Per ogni prodotto, trovare la quantità totale di pezzi forniti

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400106

Page 107: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

CodP

P1 600

Per ogni prodotto, trovare la quantità totale di pezzi forniti

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FPFP

107

Page 108: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

CodP

P1 600

P2 800

Per ogni prodotto, trovare la quantità totale di pezzi forniti

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FPFP

108

Page 109: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

CodP

P1 600

P2 800

P3 600

Per ogni prodotto, trovare la quantità totale di pezzi forniti

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FPFP

109

Page 110: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

CodP

P1 600

P2 800

P3 600

P4 500

P5 500

P6 100

R

Per ogni prodotto, trovare la quantità totale di pezzi forniti

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FPFP

110

Page 111: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Raggruppamento

SELECT CodP, SUM(Qta)

FROM FP

GROUP BY CodP;

Per ogni prodotto, trovare la quantità totale di pezzi forniti

111

Page 112: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

GROUP BY

GROUP BY ElencoAttributiDiRaggruppamento

Clausola di raggruppamento

l’ordine degli attributi di raggruppamento è ininfluente

Nella clausola SELECT possono comparire solo

attributi presenti nella clausola GROUP BY

funzioni aggregate

112

Page 113: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

GROUP BY e WHERE

CodF NomeF NSoci Sede

F1 Andrea 2 Torino

F2 Luca 1 Milano

F3 Antonio 3 Milano

F4 Gabriele 2 Torino

F5 Matteo 3 Venezia

FCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

FP

Per ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano

113

Page 114: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

F.CodF F.NomeF F.NSoci F.Sede FP.CodF FP.CodP FP.Qta

F1 Andrea 2 Torino F1 P1 300

F1 Andrea 2 Torino F1 P2 200

F1 Andrea 2 Torino F1 P3 400

F1 Andrea 2 Torino F1 P4 200

F1 Andrea 2 Torino F1 P5 100

F1 Andrea 2 Torino F1 P6 100

F2 Luca 1 Milano F2 P1 300

F2 Luca 1 Milano F2 P2 400

F3 Antonio 3 Milano F3 P2 200

F4 Gabriele 2 Torino F4 P3 200

F4 Gabriele 2 Torino F4 P4 300

F4 Gabriele 2 Torino F4 P5 400

Per ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano

GROUP BY e WHERE

114

Page 115: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

GROUP BY e WHERE

SELECT CodP, SUM(Qta)

FROM FP, F

WHERE FP.CodF=F.CodF AND Sede='Milano'

GROUP BY CodP;

I prodotti senza forniture non sono inclusi nel risultato

Per ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano

115

Page 116: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

FP.CodP FP.Qta

P1 300

P2 400

P2 200

FP.CodP

P1 300

P2 600

R

Per ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano

GROUP BY e WHERE

116

Page 117: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

GROUP BY e SELECT

SELECT P.CodP, NomeP, SUM(Qta)

FROM P, FP

WHERE P.CodP=FP.CodP

GROUP BY P.CodP, NomeP

Artificio sintattico

gli attributi univocamente determinati da attributi già presenti nella clausola GROUP BY possono essere aggiunti senza alterare il risultato

Per ogni prodotto, trovare il codice, il nome e la quantità totale fornita

117

Page 118: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Struttura dell’istruzione SELECT (5)

SELECT [DISTINCT] ElencoAttributiDaVisualizzare

FROM ElencoTabelleDaUtilizzare

[WHERE CondizioniDiTupla ]

[GROUP BY ElencoAttributiDiRaggruppamento ]

[ORDER BY ElencoAttributiDiOrdinamento ];

118

Page 119: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Condizione di selezione sui gruppi

Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi

la condizione è definita su valori aggregati

Non è possibile utilizzare la clausola WHERE

119

Page 120: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

CodP

P1 600

FP

Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

Condizione di selezione sui gruppi (n.1)

FP

120

Page 121: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

CodP

P1 600

P2 800

P3 600

FP

Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

Condizione di selezione sui gruppi (n.1)

FP

121

Page 122: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

FP

Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi

CodP

P1 600

P2 800

P3 600

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

Condizione di selezione sui gruppi (n.1)

FP

122

Page 123: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

R

FP

Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi

CodF CodP Qta

F1 P1 300

F2 P1 300

F1 P2 200

F2 P2 400

F3 P2 200

F1 P3 400

F4 P3 200

F1 P4 200

F4 P4 300

F1 P5 100

F4 P5 400

F1 P6 100

CodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

CodP

P1 600

P2 800

P3 600

Condizione di selezione sui gruppi (n.1)

FP

123

Page 124: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

SELECT CodP, SUM(Qta)

FROM FP

GROUP BY CodP

HAVING SUM(Qta)>=600;

La clausola HAVING permette di specificare condizioni su funzioni aggregate

Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi

Condizione di selezione sui gruppi (n.1)

124

Page 125: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Trovare il codice dei prodotti rossi forniti da più di un fornitore

FPCodF CodP Qta

F1 P1 300

F1 P2 200

F1 P3 400

F1 P4 200

F1 P5 100

F1 P6 100

F2 P1 300

F2 P2 400

F3 P2 200

F4 P3 200

F4 P4 300

F4 P5 400

CodP NomeP Colore Taglia Magazzino

P1 Maglia Rosso 40 Torino

P2 Jeans Verde 48 Milano

P3 Camicia Blu 48 Roma

P4 Camicia Blu 44 Torino

P5 Gonna Blu 40 Milano

P6 Bermuda Rosso 42 Torino

P

Condizione di selezione sui gruppi (n.2)

125

Page 126: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

SELECT FP.CodP

FROM FP, P

WHERE FP.CodP=P.CodP AND Colore='Rosso'

GROUP BY FP.CodP

HAVING COUNT(*)>1;

Trovare il codice dei prodotti rossi forniti da più di un fornitore

Condizione di selezione sui gruppi (n.2)

126

Page 127: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Trovare il codice dei prodotti rossi forniti da più di un fornitore

F.CodF F.CodP F.Qta P.CodP P.NomeP P.Colore P.Taglia P.Magazzino

F1 P1 300 P1 Maglia Rosso 40 Torino

F2 P1 300 P1 Maglia Rosso 40 Torino

F1 P6 100 P6 Bermuda Rosso 42 Torino

CodP

P1

R

Condizione di selezione sui gruppi (n.2)

127

Page 128: Linguaggio SQL: fondamenti M - polito.it...F1 Andrea 2 Torino F2 Luca 1 Milano F3 Antonio 3 Milano F4 Gabriele 2 Torino F5 Matteo 3 Venezia F FP CodFCodP Qta F1 P1 300 F1 P2 200 F1P3

DBMG

Struttura dell’istruzione SELECT

SELECT [DISTINCT] ElencoAttributiDaVisualizzare

FROM ElencoTabelleDaUtilizzare

[WHERE CondizioniDiTupla ]

[GROUP BY ElencoAttributiDiRaggruppamento ]

[HAVING CondizioniSuAggregati ]

[ORDER BY ElencoAttributiDiOrdinamento ];

128