[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 616.   Interrogazioni simultanee di più relazioni

Quando si realizzano delle relazioni, spesso si considerano dei collegamenti tra queste, per evitare di ripetere le stesse informazioni in relazioni differenti. La relazione Movimenti, creata all'inizio di queste lezioni, contiene diversi attributi che, in pratica, fanno riferimento a tuple di altre relazioni.

Figura 616.1. La relazione Movimenti, già apparsa nella figura 612.12.

Movimento Articolo Causale Data Cliente Fornitore Quantita Valore
1 2 1 2007-01-15 NULL 3 10 000 100,00
2 2 2 2007-01-16 2 NULL 1 000 10,00
3 102 1 2007-01-17 NULL 2 1 000 200,00
4 102 2 2007-01-18 1 NULL 100 20,00
5 401 1 2007-01-19 NULL 1 1 000 200,00
6 401 2 2007-01-20 3 NULL 200 40,00
7 401 4 2007-01-20 NULL 1 100 20,00
8 102 4 2007-01-20 NULL 2 100 20,00
9 601 1 2007-01-21 NULL 3 2 000 1 000,00
10 601 2 2007-01-25 1 NULL 1 000 500,00

Intuitivamente si comprende che i dati usati per creare il collegamento con un'altra relazione, devono essere sufficienti a individuare le tuple in modo univoco. Quindi, sulla base di questa univocità, si possono collegare effettivamente i dati attraverso delle interrogazioni che coinvolgono tutte le relazioni interessate, per generare un listato con le informazioni desiderate.

616.1   Interrogazione simultanea delle relazioni «Movimenti» e «Articoli»

Con l'ausilio di un programma per la scrittura e modifica di file di testo puro, si crei il file prova-interrogazione-movimenti-articoli.sql, contenente il testo seguente, sostituendo le metavariabili con informazioni appropriate e rispettando la punteggiatura:

-- Interrogazione delle relazioni "Movimenti" e "Articoli"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: prova-interrogazione-movimenti-articoli.sql

.headers on
.mode column

SELECT Movimenti.Data, Articoli.Descrizione,
       Movimenti.Causale, Movimenti.Quantita
       FROM Movimenti, Articoli
       WHERE Movimenti.Articolo = Articoli.Articolo;

Come si può vedere, per evitare ambiguità, i nomi degli attributi sono preceduti dal nome della relazione a cui appartengono, separati da un punto.

Si controlli di avere scritto il file prova-interrogazione-movimenti-articoli.sql in modo corretto, rispettando anche la punteggiatura; si controlli di avere salvato il file con il nome previsto, quindi si proceda con il comando seguente:

sqlite3 mag.db < prova-interrogazione-movimenti-articoli.sql[Invio]

Si dovrebbe ottenere il listato seguente:

Data        Descrizione                             Causale     Quantita  
----------  --------------------------------------  ----------  ----------
2007-01-15  Dischetti da 9 cm 1440 Kibyte colorati  1           10000     
2007-01-16  Dischetti da 9 cm 1440 Kibyte colorati  2           1000      
2007-01-17  CD-R 52x                                1           1000      
2007-01-18  CD-R 52x                                2           100       
2007-01-19  DVD+R 8x                                1           1000      
2007-01-20  DVD+R 8x                                2           200       
2007-01-20  DVD+R 8x                                4           100       
2007-01-20  CD-R 52x                                4           100       
2007-01-21  DVD+RW 8x                               1           2000      
2007-01-25  DVD+RW 8x                               2           1000      

616.2   Interrogazione simultanea delle relazioni «Movimenti», «Articoli» e «Causali»

Si riprenda il file prova-interrogazione-movimenti-articoli.sql e lo si modifichi in modo da avere il contenuto seguente:

-- Interrogazione delle relazioni "Movimenti", "Articoli" e "Causali"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: prova-interrogazione-movimenti-articoli.sql

.headers on
.mode column

SELECT Movimenti.Data, Articoli.Descrizione,
       Causali.Descrizione
       FROM Movimenti, Articoli, Causali
       WHERE Movimenti.Articolo = Articoli.Articolo
         AND Movimenti.Causale = Causali.Causale;

Si controlli di avere modificato il file prova-interrogazione-movimenti-articoli.sql in modo corretto, rispettando anche la punteggiatura; si controlli di avere salvato il file con il nome previsto, quindi si proceda con il comando seguente:

sqlite3 mag.db < prova-interrogazione-movimenti-articoli.sql[Invio]

Si dovrebbe ottenere il listato seguente:

Data        Descrizione                             Descrizione        
----------  --------------------------------------  -------------------
2007-01-15  Dischetti da 9 cm 1440 Kibyte colorati  Carico per acquisto
2007-01-16  Dischetti da 9 cm 1440 Kibyte colorati  Scarico per vendita
2007-01-17  CD-R 52x                                Carico per acquisto
2007-01-18  CD-R 52x                                Scarico per vendita
2007-01-19  DVD+R 8x                                Carico per acquisto
2007-01-20  DVD+R 8x                                Scarico per vendita
2007-01-20  DVD+R 8x                                Reso a fornitore   
2007-01-20  CD-R 52x                                Reso a fornitore   
2007-01-21  DVD+RW 8x                               Carico per acquisto
2007-01-25  DVD+RW 8x                               Scarico per vendita

616.3   Verifica sull'interrogazione simultanea delle relazioni «Movimenti» e «Causali»

Si prepari il file interrogazione-movimenti-causali-01.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco di tutte le tuple per le quali si possa stabilire un abbinamento in base al codice della causale. Precisamente, si vuole ottenere l'attributo Articolo dalla relazione Movimenti; l'attributo Descrizione dalla relazione Causali; l'attributo Data dalla relazione Movimenti.

Figura 616.6. Scheletro del file interrogazione-movimenti-causali-01.sql, da completare.

-- Interrogazione delle relazioni "Movimenti" e "Causali"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: interrogazione-movimenti-causali-01.sql

.headers on
.mode column

SELECT ...
       FROM ...
       WHERE ...

Una volta completato e salvato il file interrogazione-movimenti-causali-01.sql, se ne controlli il funzionamento con la base di dati:

sqlite3 mag.db < interrogazione-movimenti-causali-01.sql[Invio]

Si dovrebbe ottenere il risultato seguente:

Articolo    Descrizione          Data      
----------  -------------------  ----------
2           Carico per acquisto  2007-01-15
2           Scarico per vendita  2007-01-16
102         Carico per acquisto  2007-01-17
102         Scarico per vendita  2007-01-18
401         Carico per acquisto  2007-01-19
401         Scarico per vendita  2007-01-20
401         Reso a fornitore     2007-01-20
102         Reso a fornitore     2007-01-20
601         Carico per acquisto  2007-01-21
601         Scarico per vendita  2007-01-25

Se il risultato è corretto, si proceda con la stampa:

sqlite3 mag.db < interrogazione-movimenti-causali-01.sql | lpr[Invio]

Si consegni per la valutazione, la stampa ottenuta in questo modo, assieme alla stampa del file interrogazione-movimenti-causali-01.sql.

616.4   Verifica sull'interrogazione simultanea delle relazioni «Movimenti», «Causali» e «Clienti»

Si prepari il file interrogazione-movimenti-causali-clienti-01.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco di tutte le tuple per le quali si possa stabilire un abbinamento in base al codice della causale e in base al codice del cliente. Precisamente, si vuole ottenere l'attributo Articolo dalla relazione Movimenti; l'attributo Descrizione dalla relazione Causali; l'attributo Data dalla relazione Movimenti; l'attributo RagioneSociale dalla relazione Clienti.

Figura 616.8. Scheletro del file interrogazione-movimenti-causali-clienti-01.sql, da completare.

-- Interrogazione delle relazioni "Movimenti", "Causali" e "Clienti"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: interrogazione-movimenti-causali-clienti-01.sql

.headers on
.mode column

SELECT ...
       FROM ...
       WHERE ...

Una volta completato e salvato il file interrogazione-movimenti-causali-clienti-01.sql, se ne controlli il funzionamento con la base di dati:

sqlite3 mag.db < interrogazione-movimenti-causali-clienti-01.sql[Invio]

Si dovrebbe ottenere il risultato seguente:

Articolo    Descrizione          Data        RagioneSociale
----------  -------------------  ----------  --------------
2           Scarico per vendita  2007-01-16  Filano Filani 
102         Scarico per vendita  2007-01-18  Mevio Mevi    
401         Scarico per vendita  2007-01-20  Martino Martin
601         Scarico per vendita  2007-01-25  Mevio Mevi    

Se il risultato è corretto, si proceda con la stampa:

sqlite3 mag.db < interrogazione-movimenti-causali-clienti-01.sql \
  \        | lpr
[Invio]

Si consegni per la valutazione, la stampa ottenuta in questo modo, assieme alla stampa del file interrogazione-movimenti-causali-clienti-01.sql.

616.5   Verifica sull'interrogazione ordinata e simultanea delle relazioni «Movimenti», «Causali» e «Clienti»

Si prepari il file interrogazione-movimenti-causali-clienti-02.sql, che deve avere gli stessi requisiti della verifica precedente, facendo in modo, però, che il risultato dell'interrogazione avvenga in modo ordinato, in base alla ragione sociale dei clienti.

Figura 616.10. Scheletro del file interrogazione-movimenti-causali-clienti-02.sql, da completare.

-- Interrogazione delle relazioni "Movimenti", "Causali" e "Clienti"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: interrogazione-movimenti-causali-clienti-02.sql

.headers on
.mode column

SELECT ...
       FROM ...
       WHERE ...
       ORDER BY ...

Una volta completato e salvato il file interrogazione-movimenti-causali-clienti-02.sql, se ne controlli il funzionamento con la base di dati:

sqlite3 mag.db < interrogazione-movimenti-causali-clienti-02.sql[Invio]

Si dovrebbe ottenere il risultato seguente:

Articolo    Descrizione          Data        RagioneSociale
----------  -------------------  ----------  --------------
2           Scarico per vendita  2007-01-16  Filano Filani 
401         Scarico per vendita  2007-01-20  Martino Martin
601         Scarico per vendita  2007-01-25  Mevio Mevi    
102         Scarico per vendita  2007-01-18  Mevio Mevi    

Se il risultato è corretto, si proceda con la stampa:

sqlite3 mag.db < interrogazione-movimenti-causali-clienti-02.sql \
  \        | lpr
[Invio]

Si consegni per la valutazione, la stampa ottenuta in questo modo, assieme alla stampa del file interrogazione-movimenti-causali-clienti-02.sql.

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome interrogazioni_simultanee_di_piu_relazioni.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!