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


Capitolo 614.   Interrogazione ordinata di una relazione

Attraverso l'istruzione SELECT, aggiungendo l'opzione ORDERED BY, è possibile specificare gli attributi secondo i quali ordinare il risultato. In mancanza dell'indicazione di questa opzione, l'elenco delle tuple si ottiene secondo un ordine «casuale», che solitamente coincide con la sequenza di inserimento.

614.1   Interrogazione ordinata

A titolo di esempio, si vuole ottenere l'elenco delle tuple della relazione Articoli, in ordine di descrizione. Si può utilizzare il programma sqlite3 in modo interattivo:

sqlite3 mag.db[Invio]

SQLite version ...
Enter ".help" for instructions

sqlite> .headers on[Invio]

sqlite> .mode column[Invio]

sqlite> SELECT * FROM Articoli ORDER BY Descrizione;[Invio]

Articolo    Descrizione  UM          Listino     ScortaMin 
----------  -----------  ----------  ----------  ----------
101         CD-R 16x     pz          0.5         500       
102         CD-R 52x     pz          1           500       
201         CD-RW 4x     pz          1           200       
202         CD-RW 8x     pz          1.5         200       
402         DVD+R 16x    pz          2           200       
401         DVD+R 8x     pz          1           200       
601         DVD+RW 8x    pz          2           200       
302         DVD-R 16x    pz          2           200       
301         DVD-R 8x     pz          1           200       
501         DVD-RW 8x    pz          2           200       
1           Dischetti d  pz          0.2         500       
2           Dischetti d  pz          0.25        500       

Con la relazione Articoli, potrebbe essere interessante un ordinamento per listino, ma in questo caso si aggiunge anche la descrizione, quando il prezzo di listino risulta uguale:

sqlite> SELECT * FROM Articoli ORDER BY Listino, Descrizione;[Invio]

Articolo    Descrizione                    UM          Listino     ScortaMin 
----------  -----------------------------  ----------  ----------  ----------
1           Dischetti da 9 cm 1440 Kibyte  pz          0.2         500       
2           Dischetti da 9 cm 1440 Kibyte  pz          0.25        500       
101         CD-R 16x                       pz          0.5         500       
102         CD-R 52x                       pz          1           500       
201         CD-RW 4x                       pz          1           200       
401         DVD+R 8x                       pz          1           200       
301         DVD-R 8x                       pz          1           200       
202         CD-RW 8x                       pz          1.5         200       
402         DVD+R 16x                      pz          2           200       
601         DVD+RW 8x                      pz          2           200       
302         DVD-R 16x                      pz          2           200       
501         DVD-RW 8x                      pz          2           200       

sqlite> .quit[Invio]

Si osservi che l'ordinamento dipende dal tipo di informazione che l'attributo relativo può contenere. Per esempio, nel caso della relazione Articoli, il riordino per descrizione avviene in modo lessicografico, mentre il riordino per listino avviene in base al valore numerico.

614.2   Verifica sull'interrogazione ordinata della relazione «Articoli»

Si prepari il file interrogazione-articoli-02.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco di tutte le tuple della relazione Articoli, ordinate in base al livello di scorta minima e di descrizione; inoltre, si vogliono ottenere solo alcuni attributi, secondo la sequenza: ScortaMin, Descrizione, Articolo.

Figura 614.4. Scheletro del file interrogazione-articoli-02.sql, da completare.

-- Interrogazione della relazione "Articoli"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: interrogazione-articoli-02.sql

.headers on
.mode column

SELECT ...

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

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

Si dovrebbe ottenere il risultato seguente:

ScortaMin   Descrizione  Articolo  
----------  -----------  ----------
200         CD-RW 4x     201       
200         CD-RW 8x     202       
200         DVD+R 16x    402       
200         DVD+R 8x     401       
200         DVD+RW 8x    601       
200         DVD-R 16x    302       
200         DVD-R 8x     301       
200         DVD-RW 8x    501       
500         CD-R 16x     101       
500         CD-R 52x     102       
500         Dischetti d  1         
500         Dischetti d  2         

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

sqlite3 mag.db < interrogazione-articoli-02.sql | lpr[Invio]

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

614.3   Verifica sull'interrogazione ordinata della relazione «Clienti»

Si prepari il file interrogazione-clienti-01.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco di tutte le tuple della relazione Clienti, ordinate in base alla denominazione della ragione sociale, limitatamente agli attributi Cliente e RagioneSociale.

Figura 614.6. Scheletro del file interrogazione-clienti-01.sql, da completare.

-- Interrogazione della relazione "Clienti"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: interrogazione-clienti-01.sql

.headers on
.mode column

SELECT ...

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

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

Si dovrebbe ottenere il risultato seguente:

Cliente     RagioneSociale
----------  --------------
2           Filano Filani 
3           Martino Martin
1           Mevio Mevi    

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

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

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

614.4   Verifica sull'interrogazione ordinata della relazione «Causali»

Si prepari il file interrogazione-causali-01.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco di tutte le tuple della relazione Causali, ordinate in base al fatto che si tratti di movimenti in diminuzione o in aumento (l'attributo Variazione).

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

-- Interrogazione della relazione "Causali"
-- Esercizio di: cognome nome classe
-- Data: data
-- File: interrogazione-causali-01.sql

.headers on
.mode column

SELECT ...

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

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

Si dovrebbe ottenere il risultato seguente:

Causale     Descrizione                 Variazione
----------  --------------------------  ----------
12          Scarico ad altro magazzino  -1        
10          Scarico a produzione        -1        
8           Rettifica diminuzione acqu  -1        
6           Rettifica aumento vendite   -1        
4           Reso a fornitore            -1        
2           Scarico per vendita         -1        
13          Saldo iniziale              1         
11          Carico da altro magazzino   1         
9           Carico da produzione        1         
7           Rettifica diminuzione vend  1         
5           Rettifica aumento acquisto  1         
3           Reso da cliente             1         
1           Carico per acquisto         1         

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

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

Si consegni per la valutazione, la stampa ottenuta in questo modo, assieme alla stampa del file interrogazione-causali-01.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 interrogazione_ordinata_di_una_relazione.htm

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

Valid ISO-HTML!

CSS validator!