320 likes | 459 Views
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.
E N D
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
select Nome from Cliente; Nome(Cliente)
Clausola SELECT(opzione DISTINCT) select Nome from Cliente; selectdistinct Nome from Cliente;
Clausola SELECT(opzione ALIAS) select Nome as Cognome,CodC as Codice, Comune as Residenza from Cliente;
Clausola SELECT(opzione *) select* from Cliente;
Clausola FROM(opzione ALIAS) select C.Nome from Cliente C;
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 select* from Cliente where Comune=‘Milano’ or Comune=‘Napoli’; Dati dei clienti che risiedono a Milano o a Napoli
Relazioni di confronto select* from Cliente where Nome=‘Rossi’ and (Comune=‘Milano’ or Comune=‘Napoli’); Dati dei clienti che si chiamano Rossi e risiedono a Milano o a Napoli
Relazioni di confronto Dati dei clienti che si chiamano Rossi e risiedono a Milano oppure che risiedono a Napoli select* from Cliente where Nome=‘Rossi’ and Comune=‘Milano’ or Comune=‘Napoli’;
Relazioni di confronto select Nome, C.CodC, Comune from Cliente C,Ordine O where N-pezzi>100 and C.CodC=O.CodC; Dati dei clienti che hanno ordinato più di 100 pezzi di un articolo
Relazioni di confronto select Nome from Cliente C,Ordine O,Articolo A where C.CodC=O.CodC and O.CodA=A.CodA and Prezzo>3; Nomi dei clienti che hanno ordinato almeno un articolo con prezzo superiore a 3
Relazioni di appartenenza insiemistica select* from Cliente where Comune in(‘Milano’,‘Napoli’); Dati dei clienti che risiedono a Milano o a Napoli select* from Cliente where 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); select Nome, C.CodC, Comune from Cliente C,Ordine O where N-pezzi>100 and C.CodC=O.CodC;
Relazioni di appartenenza insiemistica select Nome from Cliente where CodC in (select CodC from Ordine where CodA in (select CodA from Articolo where Prezzo>3)); Nomi dei clienti che hanno ordinato almeno un articolo con prezzo superiore a 3
Relazioni di appartenenza insiemistica select *from Ordine where CodC in (select CodC from Cliente where Nome=‘Rossi) and CodA in (select CodA from Articolo where Tipo=‘Tazza’); Dati degli ordini di tazze effettuati da Rossi
Relazioni di somiglianza ortografica Dati dei clienti i cui nomi iniziano per ‘B’ select* from Cliente where Nome like ‘B*’;
Funzioni di insieme Numero di clienti i cui nomi iniziano per ‘R’ select count(Nome) from Cliente where Nome like ‘R*’;
Funzioni di insieme select count(distinct Nome) from Cliente where Nome like ‘R*’; Numero di nomi di clienti che iniziano per ‘R’
Funzioni di insieme select min(Prezzo), max(Prezzo), avg(Prezzo) from Articolo; Prezzo minimo, massimo e medio degli articoli
Funzioni di insieme select * from Articolo where Prezzo in (select max(Prezzo) from Articolo); Dati degli articoli con prezzo massimo select * from Articolo where Prezzo = (select max(Prezzo) from Articolo);
Funzioni di insieme select CodC,CodA,sum(N-pezzi) from Ordine group by CodC,CodA; Per ogni cliente e per ogni articolo Il numero complessivo di pezzi dell’articolo ordinati dal cliente
Funzioni di insieme select CodC, count(*) from Ordine where N-pezzi>100 group by CodC having CodC>’C2’; Per ogni cliente con codice maggiore di C2, numero di ordini per più di 100 pezzi che ha effettuato
Ordinamento select * from Cliente order by Nome Clienti in ordine alfabetico per nome
Ordinamento select * from Cliente order by Nome,Comune Clienti in ordine alfabetico per nome e quelli con lo stesso nome ordinati per Comune
Ordinamento Articoli 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;
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>
Clausola FROM (opzione ALIAS) select Imp.Cognome, Imp.Stip, Capo.Cognome, Capo.Stip, from Impiegato Imp, Impiegato Capo where Imp.Sup=Capo.I and Imp.Stip>Capo.Stip Quali impiegati guadagnano più del loro superiore