Capitolo 2


Espressioni e operatori condizionali

Condizioni

Tutte le volte che si vuole trovare un particolare elemento o gruppo di elementi in un database, occorre specificare una o più condizioni. Le condizioni sono introdotte dalla clausola WHERE.

Esempio:

STUDENTI
NOME Cognome ANNO Classe Sezione
Mario
Bianchi
1976
1 A
Anna Bianco 1973 2 B
Marta Carli 1974 3 A
Gianni Rossi 1972 4 A
Giulio Mancini 1972 5 A
Max Zunini 1976 5 B

con l’espressione:

SELECT *
FROM STUDENTI
WHERE CLASSE = 5
AND SEZIONE = ‘A’;

si ottiene:

NOME Cognome ANNO Classe Sezione
Giulio Mancini 1972 5 A

Operatori aritmetici

Sono gli operatori aritmetici: + (somma), - (sottrazione), / (divisione), * (moltiplicazione).

L'operatore somma:

data la tabella

PREZZO
Elemento PrezzoIngrosso
Pomodori
340
Patate 510
Banane 670
Rape 450
Arance 890
Mele 230

nella seguente espressione:

SELECT ELEMENTO, PREZZOINGROSSO, PREZZOINGROSSO + 150
FROM PREZZO;

l’operatore + aggiunge 150 lire a ogni prezzo e genera la seguente tabella:

ELEMENTO PREZZOINGROSSO PREZZOINGROSSO + 150
Pomodori
340 490
Patate 510 660
Banane 670 820
Rape 450 600
Arance 890 1040
Mele 230 380

Operatore sottrazione:

l’operatore meno svolge due funzioni. La prima è quella di cambiare il segno a un numero, la seconda è quella di sottrarre i valori di una colonna da quelli di un’altra colonna. Vediamo il primo caso:

MINMAX
Regione
TempMin
TempMax
Piemonte
-4
10
Toscana
4
13
Sicilia
10
19
Lombardia
-2
9
Friuli
-3
8

con l’espressione

SELECT REGIONE, -TEMPMIN, -TEMPMAX
FROM MINMAX;

si ottiene

REGIONE
TEMPMIN
TEMPMAX
Piemonte
4
-10
Toscana
-4
-13
Sicilia
-10
-19
Lombardia
2
-9
Friuli
3
-8

Vediamo il secondo caso:

con l’espressione

SELECT REGIONE,
(TEMPMAX – TEMPMIN) Differenza
FROM MINMAX;

REGIONE DIFFERENZA
Piemonte
14
Toscana 9
Sicilia 9
Lombardia 11
Friuli 11

Operatore divisione (/):

Esempio: abbiamo la necessità di vendere a metà prezzo

PREZZO
Elemento
PrezzoIngrosso
Pomodori 340
Patate 510
Banane 670
Rape 450
Arance 890
Mele 230

con l’espressione

SELECT Elemento, PrezzoIngrosso, (PrezzoIngrosso / 2) PrezzoVendita
FROM PREZZO;

si ottiene

ELEMENTO
PREZZOINGROSSO PREZZOVENDITA
Pomodori 340 170
Patate 510 255
Banane 670 335
Rape 450 225
Arance 890 445
Mele 230 115

Operatore moltiplicazione (*):

Esempio: abbiamo la necessità di moltiplicare per 0.9

PREZZO
Elemento
PrezzoIngrosso
Pomodori 340
Patate 510
Banane 670
Rape 450
Arance 890
Mele 230

con l’espressione

SELECT Elemento, PrezzoIngrosso, (PrezzoIngrosso * 0.9) NuovoPrezzo
FROM PREZZO;

si ottiene

ELEMENTO
PREZZOINGROSSO NUOVOPREZZO
Pomodori 340 306
Patate 510 459
Banane 670 603
Rape 450 405
Arance 890 801
Mele 230 207

Operatori di confronto

L’operatore (=):

Esempio: dalla seguente tabella vogliamo estrapolare tutti i dati dell’amico Mario

AMICI
Nome
Cognome
Telefono
Giovanni Bruni 0763 546432
Antonio Rossi 06 756499
Mario Rossi 02 435591
Piero Bianchi 06 326799

SELECT *
FROM AMICI
WHERE NOME = ‘Mario’;

NOME
COGNOME
TELEFONO
Mario Rossi 02 435591

Gli operatori: maggiore (>) , maggiore o uguale (>=), minore (<), minore o uguale (<=), diverso (<>):

Questi operatori si usano allo stesso modo di come si usa l’operatore di uguaglianza. Vediamo alcuni esempi:

ANAGRAFICA
Nome
Cognome
Età
Giovanni Bruni 55
Antonio Rossi 43
Mario Rossi 49
Piero Bianchi 37

Voglio sapere chi ha più di 44 anni

SELECT *
FROM ANAGRAFICA
WHERE Età > 44;

NOME
COGNOME
ETÀ
Giovanni Bruni 55
Mario Rossi 49

Voglio sapere chi ha un’età diversa da 55 anni

SELECT *
FROM ANAGRAFICA
WHERE Età <> 55;

NOME
COGNOME ETÀ
Antonio Rossi 43
Mario Rossi 49
Piero Bianchi 37

L’operatore IS:

Modifichiamo ora la tabella ANAGRAFICA inserendo un altro nominativo di cui però non sappiamo l’età. In questo caso nel campo ETA verrà inserito in maniera ‘automatica’ il valore NULL che identifica l’assenza di dati:

NOME COGNOME ETA
Giovanni
Bruni
55
Antonio Rossi 43
Mario Rossi 49
Piero Bianchi 37
Esmeralda Gnocca  

Ora vogliamo conoscere il nome e il cognome delle persone di cui non abbiamo il dato età:

SELECT *
FROM ANAGRAFICA
WHERE ETA IS NULL;

NOME COGNOME ETA
Esmeralda Gnocca  

L’operatore IS funziona con la clausola NULL, ma possiamo sostituirlo anche con l’operatore (=): WHERE ETA = NULL;

Operatori di caratteri

Gli operatori di caratteri possono essere utilizzati per manipolare il modo in cui le stringhe devo essere ricercate.

Operatore LIKE:

È possibile estrarre da un database quei dati che assomigliano a un certo schema, senza essere perfettamente identici allo schema specificato. Vediamo qualche esempio:

ANATOMIA
Nome
Posizione
Fegato Destra-Addome
Cuore Petto
Faringe Gola
Vertebre Centro-Dorso
Incudine Orecchio
Rene Dorso

SELECT *
FROM ANATOMIA
WHERE Posizione LIKE ‘%Dorso%’;

Nome
Posizione
Vertebre
Centro-Dorso
Rene Dorso

Si noti l’uso del segno ‘%’ dopo LIKE. Esso rappresenta zero, uno o più caratteri. Il corrispondente carattere implementato da Access è ‘*’.

Nome
Posizione
Rene Dorso

SELECT *
FROM ANATOMIA
WHERE Nome LIKE ‘F%’;

Nome
Posizione
Fegato Destra-Addome
Faringe Gola

Vediamo altri esempi:

NOMINATIVI
Nome
Cognome
Provincia
Giovanni Bruni CO
Antonio Rossi MI
Mario Rossi CT
Piero Bianchi PV

SELECT *
FROM NOMINATIVI
WHERE Provincia LIKE ‘C_’;

Nome
Cognome
Provincia
Giovanni Bruni CO
Mario Rossi CT

Il carattere di sottolineatura (_) è un carattere che sostituisce un singolo carattere e non il carattere spazio. Il suo corrispettivo implementato da Access è ‘?’. Access implementa anche il segno ‘#’ che sostituisce qualsiasi singola cifra (0, 1, 2, 3, ecc,).

Operatore di concatenazione (||)

Il simbolo || serve a concatenare due stringhe. Il corrispettivo operatore che si usa con Access è ‘&’. Vediamo alcuni esempi:

AMICI
COGNOME NOME TELEFONO PR CAP
ROSSI ALESSANDRA 0761 556632 BG 01023
VERDI ALESSANDRA 02 345622 MI 03456
MERRILI TITTI 0732 433388 CO 01255
BANFI BARBY 0722 114381 BR 03367
PERSIANI MARIA 0581 931522 CA 09941
MAZZA JO 0359 118267 PV 01944
BORDONI CHIARA 0445 668193 CT 01042

SELECT NOME || COGNOME NOMECOMPLETO
FROM AMICI;

NOMECOMPLETO
ALESSANDRAROSSI
ALESSANDRAVERDI
TITTIMERRILI
BARBYBANFI
MARIAPERSIANI
JOMAZZA
BORDONICHIARA

Access non implementa, oltre che l’operatore ‘||’, anche questo modo di ridenominare le colonne estrapolate:

SELECT NOME || COGNOME NOMECOMPLETO

Ecco un’altra applicazione dell’operatore di concatenazione:

SELECT COGNOME || ‘, ’ || NOME AMICO
FROM AMICI;

AMICO
ROSI, ALESSANDRA
VERDI, ALESSANDRA
MERRILI, TITTI
BANFI, BARBY
PERSIANI, MARIA
MAZZA, JO
BORDONI, CHIARA

Gli operatori logici

Per comprendere a pieno gli operatori logici bisogna introdurre i fondamenti dell’algebra di Boole.

Algebra di BOOLE

L’elemento essenziale del pensiero umano è la logica che permette all’uomo di formulare ragionamenti e di elaborare informazioni che gli vengono fornite dall’esterno. L’uomo si avvale di una logica esprimibile con un linguaggio che gli è congeniale e che si sa essere il linguaggio binario.

Il tipo di logica dei calcolatori è un modello applicativo di un sistema logico costituito nel secolo scorso dal matematico inglese George Boole che da lui prende il nome di ‘algebra booleana’.
Il sistema logico di Boole trae la sua prima ispirazione dal tentativo di introdurre un ‘calcolo logico’ o, più significativamente di ‘matematizzare’ le leggi del pensiero logico.

George Boole pubblicò nel 1856 un trattato in cui espose il suo articolato calcolo logico.
L’algebra delle proposizioni è la logica di cui si avvalgono i calcolatori per interpretare ed eseguire le istruzioni dei programmi; è anche la logica usata nella progettazione e per il funzionamento dei circuiti elettronici.

Algebra delle proposizioni

Le frasi del linguaggio della logica si differenziano notevolmente da quelle del linguaggio comune perché per ogni frase logica ha senso chiedersi se ciò che enuncia è vero o falso.
Le frasi del linguaggio della logica prendono il nome di proposizioni logiche o, più semplicemente, proposizioni ( o enunciati).

Per esempio, le frasi:

a: Roma è capitale d’Italia
b: 10 è un numero dispari
c: la rosa è un fiore;

sono proposizioni logiche. Infatti posiamo dire con certezza che gli enunciati a e c sono veri mentre l’enunciato b falso.

Consideriamo ora i seguenti enunciati:

d: che bello volare;
e: hai visto Maria?;
f : domani pioverà;

riferendoci a queste frasi non possiamo dire se sono vere o false. ‘Che bello volare’ può essere una proposizione vera per chi ama il volo, ma non per chi ne ha paura. La verità o la falsità della frase dipendono solo dalle emozioni soggettive. Così non si può dire se le frasi e e f sono vere o false. Quindi le frasi d, e, f non sono proposizioni logiche.
Da questo possiamo dire:

In logica si chiama proposizione ogni frase per la quale ha senso dire che è “vera”, o è “falsa”.

La logica delle proposizioni è anche detta logica bivalente proprio perché ogni proposizione può avere uno solo dei due valori: vero o falso.

Vediamo ora le operazioni sulle proposizioni.

Congiunzione logica:

Date le due proposizioni:

a: Mantova è una città;
b: L’Italia è una nazione;

la proposizione:

r: Mantova è una città e l’Italia è una nazione

è una proposizione composta, ottenuta operando sulle proposizioni a e b per mezzo del connettivo e. Il valore di verità di r dipende dai valori delle due proposizioni. L’operazione binaria che da come risultato il valore di verità r si chiama congiunzione logica.

DEFINIZIONE: Si chiama congiunzione logica un’operazione che ad ogni coppia di proposizioni a, b associa la proposizione composta r che è vera se a e b sono entrambe vere e falsa in tutti gi altri casi.

Il connettivo congiunzione viene indicato con AND. La tavola della verità della congiunzione logica è la seguente e si ottiene considerando tutte le possibile coppie di valori di verità attribuibili ad a e b.

a
b
r = a AND b
FALSO
FALSO
FALSO
FALSO
VERO
FALSO
VERO
FALSO
FALSO
VERO
VERO
VERO

Disgiunzione logica:

Date le proposizioni:

a: il quadrato è un poligono
b: Dante è un poeta

la proposizione:

r : il quadro è un poligono o Dante è un poeta

è una proposizione composta, ottenuta operando sulle proposizioni a e b per mezzo del connettivo o. L’operazione binaria che da come risultato il valore di verità r si chiama disgiunzione logica.

DEFINIZIONE: Si chiama disgiunzione logica un’operazione che ad ogni coppia di proposizioni a, b associa la proposizione composta r che è vera se almeno una delle due proposizioni è vera, falsa se a e b sono entrambe false.

Il connettivo disgiunzione logica viene indicato con OR. La tavola della verità della disgiunzione logica è la seguente e si ottiene considerando tutte le possibile coppie di valori di verità attribuibili ad a e b.

a
b
R = a OR b
FALSO
FALSO
FALSO
FALSO
VERO
VERO
VERO
FALSO
VERO
VERO
VERO
VERO

Negazione logica:

Date le proposizioni:

a: 3 è un numero dispari
b: 3 non è un numero dispari

è evidente che la proposizione b è la negazione della proposizione a. Possiamo dire che b si ottiene da a mediante la sua negazione.

DEFINIZIONE: Si chiama negazione logica un’operazione che ad una proposizione a, associa la proposizione b la quale risulta vera se a è falsa e falsa se a è vera.

La negazione logica viene indicata con NOT. La tavola della verità della negazione logica è la seguente.

a
NOT a
FALSO
VERO
VERO
FALSO

Negli esempi che utilizzeremo, per meglio comprendere gli operatori logici, non appariranno espressioni booleane complesse ma espressioni semplici, cioè composte da un solo operatore. Dobbiamo far presente però, che tali operatori sono utilizzabili come qualsiasi altro operatore matematico, dunque nulla ci impedisce di creare delle vere e proprie espressioni algebriche lunghe a piacere.
La breve panoramica sull’algebra booleana termina qui; vista la semplicità dell’argomento lasciamo al lettore il compito di utilizzare e ‘trasferire’ quanto a appreso, alle specifiche del linguaggio SQL.

Operatore AND:

Indica che entrambe le espressioni che si trovano ai suoi lati devono essere soddisfatte, vediamo un esempio:

FERIE
COGNOME
ID_DIPENDENTE
ANNI
FERIE_GODUTE
MARINI 101 2 4
ROSSI 104 5 23
ZAPPA 107 8 45
VERDI 233 4 80
BOLDI 210 15 100
GIALLI 211 10 78

vogliamo sapere quali impiegati hanno lavorato nell’azienda per 5 anni o più e hanno utilizzato più di 50 giorni di ferie.

SELECT COGNOME
FROM FERIE
WHERE ANNI >= 5
AND FERIE_GODUTE > 50;

COGNOME
BOLDI
GIALLI

L’operatore OR:

È sufficiente che una sola espressione sia verificata per ottenere il valore TRUE, vediamo un esempio:
vogliamo sapere i cognomi dei dipendenti che non hanno più di 5 anni di servizio o hanno goduto ferie per più di 80 giorni.

SELECT COGNOME
FROM FERIE
WHERE ANNI <= 5
OR FERIE_GODUTE > 80;

COGNOME
MARINI
ROSSI
ZAPPA
VERDI
BOLDI

Operatore NOT:

Ha il compito di invertire il significato di una condizione, vediamo un esempio:
vogliamo conoscere i cognomi che non iniziano per B.

SELECT COGNOME
FROM FERIE
WHERE COGNOME NOT LIKE ‘B%’;

COGNOME
MARINI
ROSSI
ZAPPA
VERDI
GIALLI


 
Precedente
INDICE
Segue
pag. 3 di 20