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


Capitolo 615.   Interrogazione selettiva di una relazione

Attraverso l'istruzione SELECT, aggiungendo l'opzione WHERE, è possibile specificare una condizione per la selezione delle tuple desiderate. In mancanza dell'indicazione di questa opzione, l'elenco delle tuple è sempre completo. La parola chiave WHERE precede un'espressione logica, che viene valutata per ogni tupla: se l'espressione risulta valida (Vero), allora la tupla viene presa in considerazione.

In queste lezioni non viene descritto in modo dettagliato come realizzare delle espressioni logiche; tuttavia, vengono raccolte qui delle tabelle riassuntive per la loro realizzazione. Gli studenti possono usarle in modo intuitivo, ma nelle verifiche non si richiede altro che utilizzare o modificare leggermente degli esempi già mostrati.

Tabella 615.1. Operatori di confronto.

Operatore e
operandi
Descrizione
op1 = op2
Vero se gli operandi si equivalgono.
op1 <> op2
Vero se gli operandi sono differenti.
op1 < op2
Vero se il primo operando è minore del secondo.
op1 > op2
Vero se il primo operando è maggiore del secondo.
op1 <= op2
Vero se il primo operando è minore o uguale al secondo.
op1 >= op2
Vero se il primo operando è maggiore o uguale al secondo.

Tabella 615.2. Operatori logici.

Operatore e
operandi
Descrizione
NOT op
Inverte il risultato logico dell'operando.
op1 AND op2
Vero se entrambi gli operandi restituiscono il valore Vero.
op1 OR op2
Vero se almeno uno degli operandi restituisce il valore Vero.

Tabella 615.3. Espressioni sulle stringhe di caratteri.

Espressioni e modelli Descrizione
stringa LIKE modello
Restituisce Vero se il modello corrisponde alla stringa. Si osservi che SQLite non accetta la forma IS LIKE.
stringa NOT LIKE modello
Restituisce Vero se il modello non corrisponde alla stringa. Si osservi che SQLite non accetta la forma IS NOT LIKE.
_
Rappresenta un carattere qualsiasi.
%
Rappresenta una sequenza indeterminata di caratteri.

Tabella 615.4. Espressioni di verifica dei valori indeterminati.

Operatori Descrizione
espressione IS NULL
Restituisce Vero se l'espressione genera un risultato indeterminato.
espressione IS NOT NULL
Restituisce Vero se l'espressione non genera un risultato indeterminato.

Tabella 615.5. Espressioni per la verifica dell'appartenenza di un valore a un intervallo o a un elenco.

Operatori e operandi Descrizione
op1 IN (elenco)
Vero se il primo operando è contenuto nell'elenco.
op1 NOT IN (elenco)
Vero se il primo operando non è contenuto nell'elenco.
op1 BETWEEN op2 AND op3
Vero se il primo operando è compreso tra il secondo e il terzo.
op1 NOT BETWEEN op2 AND op3
Vero se il primo operando non è compreso nell'intervallo.

615.1   Interrogazione selettiva

A titolo di esempio, si vuole ottenere l'elenco delle tuple della relazione Articoli, selezionando solo quelle che riportano un prezzo di listino maggiore o uguale a 1,00 €. 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 WHERE Listino >= 1;[Invio]

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

La condizione di selezione potrebbe essere più articolata; per esempio si potrebbe decidere di selezionare gli articoli che hanno un prezzo di listino maggiore o uguale a 1,00 € e che hanno una descrizione che inizia con «DVD»:

sqlite> SELECT * FROM Articoli[Invio]

   ...>          WHERE Listino >= 1 AND Descrizione LIKE 'DVD%';[Invio]

Articolo    Descrizione  UM          Listino     ScortaMin 
----------  -----------  ----------  ----------  ----------
301         DVD-R 8x     pz          1           200       
302         DVD-R 16x    pz          2           200       
401         DVD+R 8x     pz          1           200       
402         DVD+R 16x    pz          2           200       
501         DVD-RW 8x    pz          2           200       
601         DVD+RW 8x    pz          2           200       

Come sempre, si conclude il funzionamento interattivo di sqlite3 con il comando .quit:

sqlite> .quit[Invio]

615.2   Verifica sull'interrogazione selettiva della relazione «Articoli»

Si prepari il file interrogazione-articoli-03.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco delle tuple della relazione Articoli, corrispondenti a dei «DVD», che abbiano un prezzo minore o uguale a 1,00 € (l'operatore da usare per rappresentare il confronto «minore o uguale» è <=).

Figura 615.9. Scheletro del file interrogazione-articoli-03.sql, da completare.

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

.headers on
.mode column

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

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

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

Si dovrebbe ottenere il risultato seguente:

Articolo    Descrizione  UM          Listino     ScortaMin 
----------  -----------  ----------  ----------  ----------
301         DVD-R 8x     pz          1           200       
401         DVD+R 8x     pz          1           200       

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

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

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

615.3   Verifica sull'interrogazione selettiva e ordinata della relazione «Articoli»

Si prepari il file interrogazione-articoli-04.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco ordinato per livello di scorta minima delle tuple della relazione Articoli, che corrispondono a dei «CD».

Figura 615.11. Scheletro del file interrogazione-articoli-04.sql, da completare.

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

.headers on
.mode column

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

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

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

Si dovrebbe ottenere il risultato seguente:

Articolo    Descrizione  UM          Listino     ScortaMin 
----------  -----------  ----------  ----------  ----------
202         CD-RW 8x     pz          1.5         200       
201         CD-RW 4x     pz          1           200       
102         CD-R 52x     pz          1           500       
101         CD-R 16x     pz          0.5         500       

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

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

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

615.4   Verifica sull'interrogazione selettiva della relazione «Causali»

Si prepari il file interrogazione-causali-02.sql, seguendo lo scheletro seguente, tenendo conto che si vuole ottenere l'elenco delle tuple della relazione Causali che comportano un aumento (contabile) della quantità di un articolo in magazzino. Le causali che rappresentano un aumento della quantità sono quelle che, nell'attributo Variazione hanno il valore 1 (ovvero +1); pertanto, per selezionare le tuple in questione, è sufficiente verificare che questo valore sia esattamente pari a uno (utilizzando l'operatore =).

Figura 615.13. Scheletro del file interrogazione-causali-02.sql, da completare.

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

.headers on
.mode column

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

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

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

Si dovrebbe ottenere il risultato seguente:

Causale     Descrizione          Variazione
----------  -------------------  ----------
1           Carico per acquisto  1         
3           Reso da cliente      1         
5           Rettifica aumento a  1         
7           Rettifica diminuzio  1         
9           Carico da produzion  1         
11          Carico da altro mag  1         
13          Saldo iniziale       1         

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

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

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

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

Valid ISO-HTML!

CSS validator!