Date post: | 02-May-2015 |
Category: |
Documents |
Upload: | edvige-alberti |
View: | 221 times |
Download: | 1 times |
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
Terminologia
Relazione Table
Attributo Column
Tupla Row
Dominio Data type
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
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
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
Clausola SELECT(opzione DISTINCT)
select Nomefrom Cliente;
Nome
Rossi
Rossi
Bianchi
Verdi
select distinct Nomefrom Cliente;
Nome
Rossi
Bianchi
Verdi
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
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
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
Clausola WHERE
La condizione nella clausola where è un’espressione booleana (operatori: and, or, not). Vi possono comparire relazioni di:
- confronto- appartenenza insiemistica- somiglianza ortografica
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
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
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
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
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
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’;
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;
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
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
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
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
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
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
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);
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
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
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
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
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
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>
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)