Interrogazione di una base di dati relazionale SQL.

32
Interrogazione di una base di dati relazionale SQL

Transcript of Interrogazione di una base di dati relazionale SQL.

Page 1: Interrogazione di una base di dati relazionale SQL.

Interrogazione di una base di dati relazionale

SQL

Page 2: Interrogazione di una base di dati relazionale SQL.

SQL (Structured Query Language)

Linguagio standard

per la definizione, l’interrogazione

e la manipolazione

di basi di dati relazionali

Page 3: Interrogazione di una base di dati relazionale SQL.

Terminologia

Relazione Table

Attributo Column

Tupla Row

Dominio Data type

Page 4: Interrogazione di una base di dati relazionale SQL.

Costrutto SELECT

select A1, A2,…An

from R1, R2,…Rk

where C

dove:

R1, R2,…Rk sono nomi (non necessariamente distinti) di relazioni

A1, A2,…An sono attributi negli schemi di R1, R2,…Rk

C è una condizione

Page 5: Interrogazione di una base di dati relazionale SQL.

Costrutto SELECT

select A1, A2,…An

from R1, R2,…Rk

where C ;

fornisce una multinsieme (un elemento può comparire più volte) che differisce dalla relazione (insieme)

A1,A2,…AnCR1 x R2 x …x Rk

solo per le ripetizioni di elementi

Page 6: Interrogazione di una base di dati relazionale SQL.

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Nome(Cliente) select Nomefrom Cliente;

Nome

Rossi

Bianchi

Verdi

Nome

Rossi

Rossi

Bianchi

Verdi

Page 7: Interrogazione di una base di dati relazionale SQL.

Clausola SELECT(opzione DISTINCT)

select Nomefrom Cliente;

Nome

Rossi

Rossi

Bianchi

Verdi

select distinct Nomefrom Cliente;

Nome

Rossi

Bianchi

Verdi

Page 8: Interrogazione di una base di dati relazionale SQL.

Clausola SELECT(opzione ALIAS)

select Nome as Cognome,CodC as Codice,Comune as Residenza

from Cliente;

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Cognome Codice Residenza

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Page 9: Interrogazione di una base di dati relazionale SQL.

Clausola SELECT

(opzione *)

select *from Cliente;

Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Page 10: Interrogazione di una base di dati relazionale SQL.

Clausola FROM(opzione ALIAS)

select C.Nome from Cliente C;

Nome

Rossi

Rossi

Bianchi

Verdi

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Page 11: Interrogazione di una base di dati relazionale SQL.

Clausola WHERE

La condizione nella clausola where è un’espressione booleana (operatori: and, or, not). Vi possono comparire relazioni di:

- confronto- appartenenza insiemistica- somiglianza ortografica

Page 12: Interrogazione di una base di dati relazionale SQL.

Relazioni di confronto

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Neri C5 Napoli

Dati dei clienti che risiedono a Milano o a Napoli select *

from Clientewhere Comune=‘Milano’ or Comune=‘Napoli’;

Nome CodC Comune

Rossi C2 Milano

Neri C5 Napoli

Page 13: Interrogazione di una base di dati relazionale SQL.

Relazioni di confronto

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Neri C5 Napoli

Dati dei clienti che si chiamanoRossi e risiedono a Milano o a Napoli

select *from Clientewhere Nome=‘Rossi’ and(Comune=‘Milano’ or Comune=‘Napoli’);

Nome CodC Comune

Rossi C2 Milano

Page 14: Interrogazione di una base di dati relazionale SQL.

Relazioni di confronto

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Neri C5 Napoli

Dati dei clienti che si chiamanoRossi e risiedono a Milano oppure che risiedono a Napoli

select *from Clientewhere Nome=‘Rossi’ andComune=‘Milano’ or Comune=‘Napoli’;

Nome CodC Comune

Rossi C2 Milano

Neri C5 Napoli

Page 15: Interrogazione di una base di dati relazionale SQL.

Relazioni di confrontoDati dei clienti che hanno ordinato più di 100 pezzi di un articolo

select Nome, C.CodC, Comunefrom Cliente C,Ordine Owhere N-pezzi>100 and C.CodC=O.CodC;Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Ordine CodC CodA N-pezzi

C1 A1 100

C2 A2 200

C3 A2 150

C4 A3 200

C1 A3 100

Nome CodC Comune

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Page 16: Interrogazione di una base di dati relazionale SQL.

Relazioni di confrontoNomi dei clienti che hanno ordinato almeno un articolocon prezzo superiore a 3

select Nomefrom Cliente C,Ordine O,Articolo Awhere C.CodC=O.CodC and

O.CodA=A.CodA and Prezzo>3;Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Ordine CodC CodA N-pezzi

C1 A1 100

C2 A2 200

C3 A2 150

C4 A3 200

C1 A3 100

Articolo CodA Tipo Prezzo

A1 Piatto 3

A2 Bicchiere

2

A3 Tazza 4

Nome CodC Comune

Rossi C1 Roma

Verdi C4 Roma

Page 17: Interrogazione di una base di dati relazionale SQL.

Relazioni di appartenenza insiemistica

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Neri C5 Napoli

Dati dei clienti che risiedono a Milano o a Napoli

select *from Clientewhere Comune in(‘Milano’,‘Napoli’);

Nome CodC Comune

Rossi C2 Milano

Neri C5 Napoli

select *from Clientewhere Comune=‘Milano’ or Comune=‘Napoli’;

Page 18: Interrogazione di una base di dati relazionale SQL.

Relazioni di appartenenza insiemistica

Dati dei clienti che hanno ordinato più di 100 pezzi di un articolo

select * from Cliente

where CodC in (select CodC from Ordine where N-pezzi>100);

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Ordine CodC CodA N-pezzi

C1 A1 100

C2 A2 200

C3 A2 150

C4 A3 200

C1 A3 100

Nome CodC

Comune

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

select Nome, C.CodC, Comunefrom Cliente C,Ordine Owhere N-pezzi>100 and C.CodC=O.CodC;

Page 19: Interrogazione di una base di dati relazionale SQL.

Relazioni di appartenenza insiemistica

Nomi dei clienti che hanno ordinato almeno un articolocon prezzo superiore a 3

select Nome

from Clientewhere CodC in (select CodC from Ordine where CodA in (select CodA from Articolo where Prezzo>3));

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Ordine CodC CodA N-pezzi

C1 A1 100

C2 A2 200

C3 A2 150

C4 A3 200

C1 A3 100

Articolo CodA Tipo Prezzo

A1 Piatto 3

A2 Bicchiere 2

A3 Tazza 4

Nome CodC

Comune

Rossi C1 Roma

Verdi C4 Roma

Page 20: Interrogazione di una base di dati relazionale SQL.

Relazioni di appartenenza insiemistica

Dati degli ordini di tazze effettuati da Rossi

select * from Ordine

where CodC in (select CodC from Cliente where Nome=‘Rossi) and CodA in (select CodA from Articolo where Tipo=‘Tazza’);

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Ordine CodC CodA N-pezzi

C1 A1 100

C2 A2 200

C3 A2 150

C4 A3 200

C1 A3 100

Articolo CodA Tipo Prezzo

A1 Piatto 3

A2 Bicchiere 2

A3 Tazza 4

CodC

CodA

N-pezzi

C1 A3 100

Page 21: Interrogazione di una base di dati relazionale SQL.

Relazioni di somiglianza ortografica

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Belli C6 Napoli

Dati dei clienti i cui nomi iniziano per ‘B’ select *

from Clientewhere Nome like ‘B*’;

Nome CodC Comune

Bianchi C3 Roma

Belli C6 Napoli

Page 22: Interrogazione di una base di dati relazionale SQL.

Funzioni di insieme

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Ricci C7 Milano

Numero di clienti i cui nomi iniziano per ‘R’

select count(Nome)from Clientewhere Nome like ‘R*’;

count(Nome)

3

Page 23: Interrogazione di una base di dati relazionale SQL.

Funzioni di insieme

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Ricci C7 Milano

Numero di nomi di clienti che iniziano per ‘R’

select count(distinct Nome)from Clientewhere Nome like ‘R*’;

count(distinct Nome)

2

Page 24: Interrogazione di una base di dati relazionale SQL.

Funzioni di insieme

Prezzo minimo, massimo e medio degli articoli

select min(Prezzo), max(Prezzo), avg(Prezzo)from Articolo;

Articolo CodA Tipo Prezzo

A1 Piatto 3

A2 Bicchiere 2

A3 Tazza 4

A4 Caraffa 4

min(Prezzo) max(Prezzo) avg(Prezzo)

2 4 3,25

Page 25: Interrogazione di una base di dati relazionale SQL.

Funzioni di insieme

Dati degli articoli con prezzo massimo

select *from Articolo where Prezzo in (select max(Prezzo) from Articolo);

Articolo CodA Tipo Prezzo

A1 Piatto 3

A2 Bicchiere 2

A3 Tazza 4

A3 Caraffa 4

CodA Tipo Prezzo

A3 Tazza 4

A3 Caraffa 4

select *from Articolo where Prezzo = (select max(Prezzo) from Articolo);

Page 26: Interrogazione di una base di dati relazionale SQL.

Funzioni di insieme

Per ogni cliente e per ogni articoloIl numero complessivo di pezzi dell’articolo ordinati dal cliente

select CodC,CodA,sum(N-pezzi)from Ordine group by CodC,CodA;

Ordine CodC CodA N-pezzi

data

C1 A1 100 01-DEC-06

C2 A2 200 01-DEC-06

C3 A2 150 12-DEC-06

C4 A3 200 17-JAN-07

C1 A3 100 15-JAN-07

C1 A1 150 12-JAN-07

C2 A1 100 20-JAN-07

C3 A2 100 04-JAN-07

C4 A3 100 11-JAN-07

CodC CodA sum(N-pezzi)

C1 A1 250

C2 A2 200

C3 A2 250

C4 A3 300

C1 A3 100

C2 A1 100

Page 27: Interrogazione di una base di dati relazionale SQL.

Funzioni di insiemePer ogni cliente con codicemaggiore di C2, numero di ordini per più di 100 pezziche ha effettuato

select CodC, count(*)from Ordinewhere N-pezzi>100 group by CodChaving CodC>’C2’;

Ordine CodC CodA N-pezzi data

C1 A1 100 01-DEC-06

C2 A2 200 01-DEC-06

C3 A2 150 12-DEC-06

C4 A3 200 17-JAN-07

C1 A3 100 15-JAN-07

C1 A1 150 12-JAN-07

C2 A1 100 20-JAN-07

C4 A2 150 04-JAN-07

C4 A3 100 11-JAN-07

CodC count(*)

C3 1

C4 2

Page 28: Interrogazione di una base di dati relazionale SQL.

Ordinamento

Clienti in ordine alfabetico per nome

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Neri C5 Napoli

Nome CodC Comune

Bianchi C3 Roma

Neri C5 Napoli

Rossi C1 Roma

Rossi C2 Milano

Verdi C4 Roma

select * from Cliente order by Nome

Page 29: Interrogazione di una base di dati relazionale SQL.

Ordinamento

Clienti in ordine alfabetico per nome e quelli con lo stesso nome ordinati per Comune

Cliente Nome CodC Comune

Rossi C1 Roma

Rossi C2 Milano

Bianchi C3 Roma

Verdi C4 Roma

Neri C5 Napoli

Nome CodC Comune

Bianchi C3 Roma

Neri C5 Napoli

Rossi C2 Milano

Rossi C1 Roma

Verdi C4 Roma

select * from Cliente order by Nome,Comune

Page 30: Interrogazione di una base di dati relazionale SQL.

OrdinamentoArticoli in ordine alfabetico per Tipo e quelli con lo stesso Tipo ordinati in ordine decrescente per prezzo

select * from Articolo order by Tipo,Prezzo desc;

Articolo CodA Tipo Prezzo

A1 Piatto 3

A5 Piatto 2

A6 Bicchiere 1

A4 Piatto 2

A2 Bicchiere 2

A3 Tazza 4

A3 Caraffa 4

CodA Tipo Prezzo

A2 Bicchiere 2

A6 Bicchiere 1

A3 Caraffa 4

A1 Piatto 3

A5 Piatto 2

A4 Piatto 2

A3 Tazza 4

Page 31: Interrogazione di una base di dati relazionale SQL.

Costrutto SELECT

select <lista di attributi e funzioni>from <lista di tabelle> where <condizione> group by <lista attributi di raggruppamento> having <condizione di raggruppamento> order by <lista attributi>

Page 32: Interrogazione di una base di dati relazionale SQL.

Quali impiegati guadagnano più del loro superiore

select Imp.Cognome, Imp.Stip, Capo.Cognome, Capo.Stip,

from Impiegato Imp, Impiegato Capo where Imp.Sup=Capo.I and Imp.Stip>Capo.Stip

Impiegato Cognome I Stip Sup

Rossi I1 31 I3

Bianchi I2 28 I3

Verdi I3 30 I5

Neri I4 35 I5

Bruni I5 33 -

Imp.Cognome Imp.Stip Capo.Cognome Capo.Stip

Rossi 31 Verdi 30

Neri 35 Bruni 33

Clausola FROM (opzione ALIAS)