Your SlideShare is downloading. ×
0
Corso di Basi di Dati e Laboratorio




         Esercitazione di SQL
              Alfio Ferrara - Stefano Montanelli



...
Istanza della BD

                  PERSONA                               APPARTENENZA
                                   ...
Soluzione esercizio 1
    CREATE TABLE gruppo (
       id serial PRIMARY KEY,
       nome character varying(20),
       fi...
Seconda soluzione query 1
–    RUOLO(id, nome, descrizione)
–    GRUPPO(id, nome, finanziamento)
–    PERSONA(id, nome, co...
Query 3
–    RUOLO(id, nome, descrizione)
–    GRUPPO(id, nome, finanziamento)
–    PERSONA(id, nome, cognome, ruolo)
–   ...
Query 4
–    RUOLO(id, nome, descrizione)
–    GRUPPO(id, nome, finanziamento)
–    PERSONA(id, nome, cognome, ruolo)
–   ...
Soluzione query 5
L’utilizzo dell’operatore COUNT(id_gruppo)
permette di contare correttamente le occorrenze
delle persone...
Upcoming SlideShare
Loading in...5
×

S Q L

203

Published on

Published in: Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
203
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "S Q L"

  1. 1. Corso di Basi di Dati e Laboratorio Esercitazione di SQL Alfio Ferrara - Stefano Montanelli A.A. 2005/2006 Basi di Dati e Laboratorio 1 Schema Relazionale – RUOLO(id, nome, descrizione) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) – GRUPPO(id, nome, finanziamento) A.A. 2005/2006 Basi di Dati e Laboratorio 2 Istanza della BD GRUPPO RUOLO id nome finanz. id nome descrizione 1 coordinatori 9000 1 professore descr1 2 laboratorio 16000 2 ricercatore descr2 3 corso BD 13000 3 tesista NULL 4 progetto H 12000 4 studente descr4 5 corso OSW 10000 A.A. 2005/2006 Basi di Dati e Laboratorio 3
  2. 2. Istanza della BD PERSONA APPARTENENZA id_persona id_gruppo id nome cognome ruolo 1 2 1 Carlo Bianchi 2 1 4 2 Paola Borroni 2 2 2 3 Marco Franchi 1 3 1 4 Lorenzo Lanzi 2 3 2 5 Franco Rossi NULL 3 4 6 Sandra Neri 3 4 2 7 Elena Ferrari 1 5 4 8 Andrea Verdi 2 8 2 8 5 A.A. 2005/2006 Basi di Dati e Laboratorio 4 Esercizio 1 • Formulare in SQL i comandi di creazione delle relazioni RUOLO, PERSONA, APPARTENENZA, GRUPPO, tenendo presente che: – Nome e cognome di una persona non possono contenere valori nulli – Il finanziamento assegnato ad un gruppo non può superare i 20.000 euro • Si richiede di esprimere: – le opportune clausole PRIMARY KEY e FOREIGN KEY, eventuali vincoli di integrita’ sui valori degli attributi e eventuali valori di default per gli attributi; – i seguenti vincoli di integrita’ referenziale: • Non è possibile cancellare una persona se appartiene ad almeno un gruppo • Le variazioni agli identificatori dei gruppi vanno riportate anche nelle registrazioni relative all’appartenenza A.A. 2005/2006 Basi di Dati e Laboratorio 5 Soluzione esercizio 1 CREATE TABLE ruolo ( id serial PRIMARY KEY, nome character varying(20), descrizione character varying(50) ); CREATE TABLE persona ( id serial PRIMARY KEY, nome character varying(20) NOT NULL, cognome character varying(20) NOT NULL, ruolo integer REFERENCES ruolo(id) ); A.A. 2005/2006 Basi di Dati e Laboratorio 6
  3. 3. Soluzione esercizio 1 CREATE TABLE gruppo ( id serial PRIMARY KEY, nome character varying(20), finanziamento integer CHECK (finanziamento < 20000) ); CREATE TABLE appartenenza ( id_persona integer REFERENCES persona(id) ON DELETE NO ACTION, id_gruppo integer REFERENCES gruppo(id) ON UPDATE CASCADE, PRIMARY KEY (id_persona, id_gruppo) ); A.A. 2005/2006 Basi di Dati e Laboratorio 7 Query 1 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Formulare in SQL la seguente interrogazione: Determinare nome, cognome, ruolo delle persone che sono professori o tesisti A.A. 2005/2006 Basi di Dati e Laboratorio 8 Prima soluzione query 1 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Determinare nome, cognome, ruolo delle persone che sono professori o tesisti SELECT persona.nome, persona.cognome, ruolo.nome AS ruolo FROM persona, ruolo WHERE (persona.ruolo=ruolo.id) AND ((ruolo.nome= ‘professore’) OR (ruolo.nome= ‘tesista’)); A.A. 2005/2006 Basi di Dati e Laboratorio 9
  4. 4. Seconda soluzione query 1 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Determinare nome, cognome, ruolo delle persone che sono professori o tesisti SELECT persona.nome, persona.cognome, ruolo.nome AS ruolo FROM persona INNER JOIN ruolo ON persona.ruolo=ruolo.id WHERE (ruolo.nome= ‘professore’) OR (ruolo.nome= ‘tesista’); A.A. 2005/2006 Basi di Dati e Laboratorio 10 Query 2 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Formulare in SQL la seguente interrogazione: Determinare nome, cognome, ruolo di ogni persona presente nella base di dati A.A. 2005/2006 Basi di Dati e Laboratorio 11 Soluzione query 2 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Determinare nome, cognome, ruolo di ogni persona presente nella base di dati SELECT persona.nome, persona.cognome, ruolo.nome AS ruolo FROM persona LEFT [OUTER] JOIN ruolo ON persona.ruolo = ruolo.id; A.A. 2005/2006 Basi di Dati e Laboratorio 12
  5. 5. Query 3 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Formulare in SQL la seguente interrogazione: Determinare identificatore, nome, cognome, ruolo delle persone che appartengono sia al gruppo “laboratorio” che al gruppo “progetto H” A.A. 2005/2006 Basi di Dati e Laboratorio 13 Soluzione query 3 Estrazione delle persone appartenenti al gruppo laboratorio (preparatoria alla query): SELECT persona.id, persona.nome, persona.cognome, ruolo.nome AS ruolo FROM persona LEFT JOIN ruolo ON persona.ruolo = ruolo.id, appartenenza, gruppo WHERE (persona.id = appartenenza.id_persona) AND (appartenenza.id_gruppo = gruppo.id) AND (gruppo.nome = 'laboratorio') A.A. 2005/2006 Basi di Dati e Laboratorio 14 Soluzione query 3 SELECT persona.id, persona.nome, persona.cognome, ruolo.nome AS ruolo FROM persona LEFT JOIN ruolo ON persona.ruolo = ruolo.id, appartenenza, gruppo WHERE (persona.id = appartenenza.id_persona) AND (appartenenza.id_gruppo = gruppo.id) AND (gruppo.nome = 'laboratorio') INTERSECT (SELECT persona.id, persona.nome, persona.cognome, ruolo.nome AS ruolo FROM persona LEFT JOIN ruolo ON persona.ruolo = ruolo.id, appartenenza, gruppo WHERE (persona.id = appartenenza.id_persona) AND (appartenenza.id_gruppo = gruppo.id) AND (gruppo.nome = 'progetto H')); A.A. 2005/2006 Basi di Dati e Laboratorio 15
  6. 6. Query 4 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Formulare in SQL la seguente interrogazione: Determinare identificatore e nome dei gruppi che dispongono di un finanziamento superiore ai finanziamenti destinati ai gruppi dei corsi A.A. 2005/2006 Basi di Dati e Laboratorio 16 Soluzione query 4 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Determinare identificatore e nome dei gruppi che dispongono di un finanziamento superiore ai finanziamenti destinati ai gruppi dei corsi SELECT id, nome FROM gruppo WHERE finanziamento > ALL (SELECT finanziamento FROM gruppo WHERE nome LIKE ‘%corso%'); A.A. 2005/2006 Basi di Dati e Laboratorio 17 Query 5 – RUOLO(id, nome, descrizione) – GRUPPO(id, nome, finanziamento) – PERSONA(id, nome, cognome, ruolo) – APPARTENENZA(id_persona, id_gruppo) Formulare in SQL la seguente interrogazione: Determinare identificatore, nome, cognome e numero di gruppi di appartenenza di ogni persona presente nella base di dati A.A. 2005/2006 Basi di Dati e Laboratorio 18
  7. 7. Soluzione query 5 L’utilizzo dell’operatore COUNT(id_gruppo) permette di contare correttamente le occorrenze delle persone nella relazione appartenenza SELECT persona.id, persona.nome, cognome, COUNT(id_gruppo) AS numerogruppi FROM persona LEFT JOIN appartenenza ON persona.id=appartenenza.id_persona GROUP BY persona.id, cognome, persona.nome; A.A. 2005/2006 Basi di Dati e Laboratorio 19
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×