Interrogazione di una base di dati relazionale

Slides:



Advertisements
Presentazioni simili
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Advertisements

SQL92 e XQuery1.0 a confronto1 SQL92 E XQUERY1.0 A CONFRONTO Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria - Sede di Modena Corso.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Un DataBase Management System (DBMS) relazionale client/server.
SQL: Lezione 2 Esercitazione per il corso Basi di Dati Gabriel Kuper Nataliya Rassadko
Esercitazione.
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
SQL: Structured Query Language
L’algebra relazionale
Basi di Dati e Sistemi Informativi
Interrogazione di una base di dati relazionale
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
ClienteNomeCCittà RossiC1Roma RossiC2Milano BianchiC3Roma VerdiC4Roma ArticoloADenom.Prezzo A1Piatto3 A2Bicchiere2 A3Tazza4 OrdineCANpezzi C1A1100 C2A2200.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
DML – Data Manipulation Language
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Le operazioni relazionali
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
rielaborato da Atzeni-etal., Basi di dati, Capitolo 4
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di Dati 1 in eLearning C
Le operazioni relazionali (continua)
Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
COME SI CREA UNA TABELLA CON UNA CHIAVE ESTERNA
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
A. A – 2008 Basi di dati 1 Corso Prof
Rielaborato da Atzeni et al., Basi di Dati, Mc-Graw Hill
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di Dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Interrogazione di una base di dati relazionale
Corso di Basi di Dati Il Linguaggio SQL
Corso di Basi di Dati Il Linguaggio SQL
Frequenza di fallimento della terapia di prima linea basata su INI vs
Interrogazione di una base di dati relazionale
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Normalizzazione di uno schema relazionale.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Il modello relazionale
Rielaborato da Atzeni et al., Basi di Dati, Mc-Graw Hill
SQL, Definizione e interrogazione di basi di dati
Dino Pedreschi Dipartimento di Informatica a.a. 2011– 2012
Structured Query Language
Modello Relazionale Proposto agli inizi degli anni ‘70 da Codd
Join, una difficoltà Impiegato Reparto Rossi A Neri B Bianchi Reparto
Il modello relazionale
Operatori aggregati e raggruppamenti
Quantificazione Esistenziale ed Universale
Selezione e Proiezione
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere.
Docente: Sabato Bufano
Vincoli di Integrità Non tutte le combinazioni possibili di valori dei domini su cui è definita una relazione sono accettabili. Alcuni attributi possono.
Transcript della presentazione:

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,…AnCR1 x R2 x …x Rk solo per le ripetizioni di elementi

select Nome Nome(Cliente) from Cliente; Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 select Nome from Cliente; Nome(Cliente) Nome Rossi Bianchi Verdi Nome Rossi Bianchi Verdi

Clausola SELECT (opzione DISTINCT) Nome Rossi Bianchi Verdi Nome Rossi Bianchi Verdi select Nome from Cliente; select distinct Nome from Cliente;

Clausola SELECT (opzione ALIAS) Cognome Codice Residenza Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 select Nome as Cognome,CodC as Codice, Comune as Residenza from Cliente;

Clausola SELECT (opzione *) Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 select * from Cliente;

Clausola FROM (opzione ALIAS) Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Nome Rossi Bianchi Verdi 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 Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Neri C5 Napoli Nome CodC Comune Rossi C2 Milano Neri C5 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 Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Neri C5 Napoli Nome CodC Comune Rossi C2 Milano

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’; Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Neri C5 Napoli Nome CodC Comune Rossi C2 Milano Neri C5 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 Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Nome CodC Comune Rossi C2 Milano Bianchi C3 Roma Verdi C4 Ordine CodC CodA N-pezzi C1 A1 100 C2 A2 200 C3 150 C4 A3

Relazioni di confronto select C.* from Cliente C,Ordine O,Articolo A where C.CodC=O.CodC and O.CodA=A.CodA and Prezzo>3; Dati dei clienti che hanno ordinato almeno un articolo con prezzo superiore a 3 Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Nome CodC Comune Rossi C1 Roma Verdi C4 Ordine CodC CodA N-pezzi C1 A1 100 C2 A2 200 C3 150 C4 A3 Articolo CodA Tipo Prezzo A1 Piatto 3 A2 Bicchiere 2 A3 Tazza 4

Relazioni di appartenenza insiemistica select * from Cliente where Comune in(‘Milano’,‘Napoli’); Dati dei clienti che risiedono a Milano o a Napoli Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Neri C5 Napoli Nome CodC Comune Rossi C2 Milano Neri C5 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); Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Nome CodC Comune Rossi C2 Milano Bianchi C3 Roma Verdi C4 Ordine CodC CodA N-pezzi C1 A1 100 C2 A2 200 C3 150 C4 A3 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 Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Nome CodC Comune Rossi C1 Roma Verdi C4 Ordine CodC CodA N-pezzi C1 A1 100 C2 A2 200 C3 150 C4 A3 Articolo CodA Tipo Prezzo A1 Piatto 3 A2 Bicchiere 2 A3 Tazza 4

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 Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 CodC CodA N-pezzi C1 A3 100 Ordine CodC CodA N-pezzi C1 A1 100 C2 A2 200 C3 150 C4 A3 Articolo CodA Tipo Prezzo A1 Piatto 3 A2 Bicchiere 2 A3 Tazza 4

Relazioni di somiglianza ortografica Dati dei clienti i cui nomi iniziano per ‘B’ select * from Cliente where Nome like ‘B*’; Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Belli C6 Napoli Nome CodC Comune Bianchi C3 Roma Belli C6 Napoli

Funzioni di insieme select count(Nome) from Cliente Numero di clienti i cui nomi iniziano per ‘R’ select count(Nome) from Cliente where Nome like ‘R*’; Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Ricci C7 count(Nome) 3

Funzioni di insieme select count(distinct Nome) from Cliente where Nome like ‘R*’; Numero di nomi di clienti che iniziano per ‘R’ Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Ricci C7 count(distinct Nome) 2

Funzioni di insieme select min(Prezzo), max(Prezzo), avg(Prezzo) from Articolo; Prezzo minimo, massimo e medio degli articoli Articolo CodA Tipo Prezzo A1 Piatto 3 A2 Bicchiere 2 A3 Tazza 4 A4 Caraffa min(Prezzo) max(Prezzo) avg(Prezzo) 2 4 3,25

Funzioni di insieme select * from Articolo where Prezzo in (select max(Prezzo) from Articolo); Dati degli articoli con prezzo massimo Articolo CodA Tipo Prezzo A1 Piatto 3 A2 Bicchiere 2 A3 Tazza 4 Caraffa CodA Tipo Prezzo A3 Tazza 4 Caraffa 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 Ordine CodC CodA N-pezzi data C1 A1 100 01-DEC-06 C2 A2 200 C3 150 12-DEC-06 C4 A3 17-JAN-07 15-JAN-07 12-JAN-07 20-JAN-07 04-JAN-07 11-JAN-07 CodC CodA sum(N-pezzi) C1 A1 250 C2 A2 200 C3 C4 A3 300 100

Funzioni di insieme select CodC, count(*) from Ordine Per ogni cliente con codice maggiore di C2, che ha effettuato almeno 2 ordini per più di 100 pezzi, numero di tali ordini che ha effettuato select CodC, count(*) from Ordine where N-pezzi>100 and CodC>’C2’ group by CodC having count(*)>1; Ordine CodC CodA N-pezzi data C1 A1 100 01-DEC-06 C2 A2 200 C3 150 12-DEC-06 C4 A3 17-JAN-07 15-JAN-07 12-JAN-07 20-JAN-07 04-JAN-07 11-JAN-07 CodC count(*) C4 2

Ordinamento select * from Cliente order by Nome Clienti in ordine alfabetico per nome Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Neri C5 Napoli Nome CodC Comune Bianchi C3 Roma Neri C5 Napoli Rossi C1 C2 Milano Verdi C4

Ordinamento select * from Cliente order by Nome,Comune Clienti in ordine alfabetico per nome e quelli con lo stesso nome ordinati per Comune Cliente Nome CodC Comune Rossi C1 Roma C2 Milano Bianchi C3 Verdi C4 Neri C5 Napoli Nome CodC Comune Bianchi C3 Roma Neri C5 Napoli Rossi C2 Milano C1 Verdi C4

Ordinamento select * from Articolo order by Tipo,Prezzo desc; 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; Articolo CodA Tipo Prezzo A1 Piatto 3 A5 2 A6 Bicchiere 1 A4 A2 A3 Tazza 4 Caraffa CodA Tipo Prezzo A2 Bicchiere 2 A6 1 A3 Caraffa 4 A1 Piatto 3 A5 A4 Tazza

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 Impiegato Cognome I Stip Sup Rossi I1 31 I3 Bianchi I2 28 Verdi 30 I5 Neri I4 35 Bruni 33 - Imp.Cognome Imp.Stip Capo.Cognome Capo.Stip Rossi 31 Verdi 30 Neri 35 Bruni 33