SlideShare a Scribd company logo
1 of 7
Download to read offline
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
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
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
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
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
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
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

More Related Content

More from guestbe916c

Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S
Laboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M SLaboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M S
Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M Sguestbe916c
 
Laboratorio Di Basi Di Dati 01 Introduzione
Laboratorio Di  Basi Di  Dati 01 IntroduzioneLaboratorio Di  Basi Di  Dati 01 Introduzione
Laboratorio Di Basi Di Dati 01 Introduzioneguestbe916c
 
Laboratorio Di Basi Di Dati 10 P H P Cookie E Sessioni
Laboratorio Di  Basi Di  Dati 10  P H P    Cookie E SessioniLaboratorio Di  Basi Di  Dati 10  P H P    Cookie E Sessioni
Laboratorio Di Basi Di Dati 10 P H P Cookie E Sessioniguestbe916c
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Serverguestbe916c
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Clientguestbe916c
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionaleguestbe916c
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioniguestbe916c
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q Lguestbe916c
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettualeguestbe916c
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazioneguestbe916c
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logicaguestbe916c
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M Lguestbe916c
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Queryguestbe916c
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q Lguestbe916c
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioniguestbe916c
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logicaguestbe916c
 
Laboratorio Di Basi Di Dati 05 Architettura Del Web
Laboratorio Di  Basi Di  Dati 05  Architettura Del  WebLaboratorio Di  Basi Di  Dati 05  Architettura Del  Web
Laboratorio Di Basi Di Dati 05 Architettura Del Webguestbe916c
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Datiguestbe916c
 
Laboratorio Di Basi Di Dati 02 Il D B M S My S Q L
Laboratorio Di  Basi Di  Dati 02  Il  D B M S  My S Q LLaboratorio Di  Basi Di  Dati 02  Il  D B M S  My S Q L
Laboratorio Di Basi Di Dati 02 Il D B M S My S Q Lguestbe916c
 

More from guestbe916c (20)

Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S
Laboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M SLaboratorio Di  Basi Di  Dati 11  P H P   Interazione Con I  D B M S
Laboratorio Di Basi Di Dati 11 P H P Interazione Con I D B M S
 
Laboratorio Di Basi Di Dati 01 Introduzione
Laboratorio Di  Basi Di  Dati 01 IntroduzioneLaboratorio Di  Basi Di  Dati 01 Introduzione
Laboratorio Di Basi Di Dati 01 Introduzione
 
Laboratorio Di Basi Di Dati 10 P H P Cookie E Sessioni
Laboratorio Di  Basi Di  Dati 10  P H P    Cookie E SessioniLaboratorio Di  Basi Di  Dati 10  P H P    Cookie E Sessioni
Laboratorio Di Basi Di Dati 10 P H P Cookie E Sessioni
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionale
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioni
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazione
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logica
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M L
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Query
 
Algebra
AlgebraAlgebra
Algebra
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q L
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logica
 
Laboratorio Di Basi Di Dati 05 Architettura Del Web
Laboratorio Di  Basi Di  Dati 05  Architettura Del  WebLaboratorio Di  Basi Di  Dati 05  Architettura Del  Web
Laboratorio Di Basi Di Dati 05 Architettura Del Web
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Dati
 
Laboratorio Di Basi Di Dati 02 Il D B M S My S Q L
Laboratorio Di  Basi Di  Dati 02  Il  D B M S  My S Q LLaboratorio Di  Basi Di  Dati 02  Il  D B M S  My S Q L
Laboratorio Di Basi Di Dati 02 Il D B M S My S Q L
 

S Q L

  • 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. 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. 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. 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. 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. 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. 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