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


Capitolo 509.   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 509.1. La relazione Movimenti, già apparsa nella figura 505.12.

Movimento Articolo Causale Data Cliente Fornitore Quantita Valore
1 2 1 2006-01-15 NULL 3 10 000 100,00
2 2 2 2006-01-16 2 NULL 1 000 10,00
3 102 1 2006-01-17 NULL 2 1 000 200,00
4 102 2 2006-01-18 1 NULL 100 20,00
5 401 1 2006-01-19 NULL 1 1 000 200,00
6 401 2 2006-01-20 3 NULL 200 40,00
7 401 4 2006-01-20 NULL 1 100 20,00
8 102 4 2006-01-20 NULL 2 100 20,00
9 601 1 2006-01-21 NULL 3 2 000 1 000,00
10 601 2 2006-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.

509.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  
----------  --------------------------------------  ----------  ----------
2006-01-15  Dischetti da 9 cm 1440 Kibyte colorati  1           10000     
2006-01-16  Dischetti da 9 cm 1440 Kibyte colorati  2           1000      
2006-01-17  CD-R 52x                                1           1000      
2006-01-18  CD-R 52x                                2           100       
2006-01-19  DVD+R 8x                                1           1000      
2006-01-20  DVD+R 8x                                2           200       
2006-01-20  DVD+R 8x                                4           100       
2006-01-20  CD-R 52x                                4           100       
2006-01-21  DVD+RW 8x                               1           2000      
2006-01-25  DVD+RW 8x                               2           1000      

509.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        
----------  --------------------------------------  -------------------
2006-01-15  Dischetti da 9 cm 1440 Kibyte colorati  Carico per acquisto
2006-01-16  Dischetti da 9 cm 1440 Kibyte colorati  Scarico per vendita
2006-01-17  CD-R 52x                                Carico per acquisto
2006-01-18  CD-R 52x                                Scarico per vendita
2006-01-19  DVD+R 8x                                Carico per acquisto
2006-01-20  DVD+R 8x                                Scarico per vendita
2006-01-20  DVD+R 8x                                Reso a fornitore   
2006-01-20  CD-R 52x                                Reso a fornitore   
2006-01-21  DVD+RW 8x                               Carico per acquisto
2006-01-25  DVD+RW 8x                               Scarico per vendita

509.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 509.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  2006-01-15
2           Scarico per vendita  2006-01-16
102         Carico per acquisto  2006-01-17
102         Scarico per vendita  2006-01-18
401         Carico per acquisto  2006-01-19
401         Scarico per vendita  2006-01-20
401         Reso a fornitore     2006-01-20
102         Reso a fornitore     2006-01-20
601         Carico per acquisto  2006-01-21
601         Scarico per vendita  2006-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.

509.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 509.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  2006-01-16  Filano Filani 
102         Scarico per vendita  2006-01-18  Mevio Mevi    
401         Scarico per vendita  2006-01-20  Martino Martin
601         Scarico per vendita  2006-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.

509.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 509.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  2006-01-16  Filano Filani 
401         Scarico per vendita  2006-01-20  Martino Martin
601         Scarico per vendita  2006-01-25  Mevio Mevi    
102         Scarico per vendita  2006-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 2006.07.01 --- Copyright © 2000-2006 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] [translators] [docinfo] [indice analitico]

Valid ISO-HTML!

CSS validator!