Indietro Avanti Ripeti Inizio Aiuto Esci

In questa lezione approfondiremo ulteriormente la condizione Where e impareremo ad impostare più condizioni che possono essere verificate tutte contemporaneamente, oppure può verificarsi l'una o l'altra perché il record venga estratto.

Apriamo allora il solito database, selezioniamo la scheda "query" e apriamo in visualizzazione struttura (alt+t) la query "prova1".

Per prima cosa cancelliamo la condizione LIKE che avevamo messo sul cognome, poi aggiungiamo nell'elenco dei campi la data di nascita e ID. Questo campo in genere non si inserisce mai, ma vogliamo utilizzarlo perché è l'unico campo numerico.

Torna alle lezioni precedenti qualora non ti ricordi quali sono i passi da effettuare per eseguire queste operazioni.

Ora le nostre colonne sono diventate 5. Andiamo nella colonna ID, riga criteri e scriviamo >2; poi eseguiamo la query. Ecco: abbiamo ottenuto solo due record, e se controlli il contenuto di ID, troverai che sono presenti i record con ID 4 e 3. Con l'operatore > è possibile quindi, solo su campi numerici, richiedere l'estrazione di record il cui campo ID sia maggiore di un numero definito da noi.

Andiamo ora a vedere il risultato della nostra query in SQL:

SELECT Indirizzi.Cognome, Indirizzi.Nome, Indirizzi.Sesso, Indirizzi.[Data di Nascita], Indirizzi.ID

FROM Indirizzi

WHERE (((Indirizzi.ID)>2))

ORDER BY Indirizzi.Cognome;

Nella select avrai notato qualcosa di strano, e cioé che data di nascita è racchiuso tra parentesi quadre. Questo deve essere fatto perché il nome di questo campo è costituito da tre parole, e quindi per evitare ambiguità è stata scelta questa modalità di scrittura. Questo è importante anche per te, quando scriverai, direttamente in SQL, le tue query. Devi tener presente che, quando un nome di campo è costituito da una sola parola, non servono parentesi; quando invece è costituito da più parole, l'intero nome deve essere racchiuso tra parentesi quadre. Continuando il nostro esame, la seconda riga rimane uguale; la riga WHERE, a parte le parentesi, non presenta difficoltà: solo > invece che =. Anche la quarta riga rimane identica perché non l'abbiamo modificata.

Torniamo alla visualizzazione struttura, cancelliamo la condizione di ID e spostiamoci sui criteri di "data di nascita". Impariamo ad usare un nuovo operatore: between, che significa tra. Allora scrivi così:

Between 01/01/55 And 31/12/58. In questo modo chiediamo di vedere I record che hanno come data di nascita una data compresa tra il primo gennaio 55 e il 31 dicembre 58. Se eseguiamo questa query, ci vengono mostrati due soli record e, se li osserverai, noterai che nel campo data di nascita ci saranno date comprese tra le due che abbiamo specificato. Vediamo ora cosa è successo nell'SQL:

SELECT Indirizzi.Cognome, Indirizzi.Nome, Indirizzi.Sesso, Indirizzi.[Data di Nascita], Indirizzi.ID

FROM Indirizzi

WHERE (((Indirizzi.[Data di Nascita]) Between #1/1/1955# And #12/31/1958#))

ORDER BY Indirizzi.Cognome;

Ti faccio notare solo qualcosa relativamente alla riga WHERE, perché le altre ormai le conosciamo. In questa riga, oltre alle ridondanti parentesi tonde che già conosci, bisogna notare che le date sono racchiuse tra due simboli di cancelletto: questo per identificarle univocamente. Inoltre esse sono espresse nella notazione americana, cioè prima il mese, poi il giorno e poi l' anno. Infine, la data di nascita anche qui è racchiusa tra parentesi quadre perché è costituita da più di una parola.

Abbiamo imparato a conoscere l'operatore BETWEEN. Esso viene usato molto spesso nelle date, consentendo di vedere solo quelle comprese tra due definite da noi, ma nulla vieta di usare questo operatore anche per campi numerici, come ID. Potremmo ad esempio chiedere di vedere I record il cui ID abbia un valore compreso tra 2 e 3. In questo caso verranno estratti solo I record con ID 2 e 3, tralasciando quello con valore 1 e quello con valore 4.

Torniamo in visualizzazione struttura, cancelliamo il criterio relativo alla data di nascita di cui sappiamo tutto, e cerchiamo di imparare un altro aspetto interessante delle estrazioni.

Ora applicheremo due condizioni invece che una sola. In linguaggio tecnico si dice che due condizioni possono essere applicate in AND o in OR. Essi sono due operatori logici. AND vuol dire che perché un record venga estratto devono verificarsi entrambe le condizioni (and significa e). Or vuol dire che il record viene estratto sia se si verifica la prima, sia se si verifica la seconda condizione: OR infatti significa o.

Iniziamo applicando due condizioni in AND, cioé che devono essere vere entrambe perché il record venga estratto. Vogliamo che il valore del campo cognome inizi per N e che il campo ID contenga un numero maggiore di 2. Nei criteri del campo cognome scriviamo:

Like "N" & "*", mentre nei criteri del campo ID scriviamo >2; poi eseguiamo la query.

Troveremo un solo record: il cognome è Neri (inizia per N), l'ID è 3 (è maggiore di 2). Quando avevamo messo solo la condizione che ID fosse maggiore di 2, avevamo ottenuto due record, quello con ID 3 e quello con ID 4. Ora però le condizioni sono due e devono essere soddisfatte entrambe. Il cognome del record con ID 4 non inizia per N!

Andiamo a verificare com'è stata scritta questa query:

SELECT Indirizzi.Cognome, Indirizzi.Nome, Indirizzi.Sesso, Indirizzi.[Data di Nascita], Indirizzi.ID

FROM Indirizzi

WHERE (((Indirizzi.Cognome) Like "N" & "*") AND ((Indirizzi.ID)>2))

ORDER BY Indirizzi.Cognome;

Esplora bene la riga WHERE per capire come devono essere scritte due condizioni in AND che, per essere soddisfatte, devono essere vere entrambe.

Proviamo adesso ad inserire due condizioni in OR. Torniamo in visualizzazione struttura e cancelliamo la riga criteri del campo cognome, lasciando invece inalterata quella del campo ID.

Vogliamo che vengano estratti I record il cui ID sia maggiore di 2 o che contengano M nel campo sesso. Per farlo, bisogna inserire M nella riga oppure del campo sesso.

Dopo averlo scritto, esegui pure la query. Noterai che sono stati estratti tutti e Quattro I record della nostra tabella: due perché il loro ID è maggiore di 2 e due perché contengono M nel campo sesso.

Sono stati quindi estratti sia I record che soddisfano la prima condizione, sia quelli che soddisfano la seconda.

L' SQL sarà:

SELECT Indirizzi.Cognome, Indirizzi.Nome, Indirizzi.Sesso, Indirizzi.[Data di Nascita], Indirizzi.ID

FROM Indirizzi

WHERE (((Indirizzi.ID)>2)) OR (((Indirizzi.Sesso)="m"))

ORDER BY Indirizzi.Cognome;

Osserviamo solo la riga WHERE per notare che le due condizioni sono divise dall'operatore OR.

Abbiamo quindi visto in questa lezione come si trovano altre condizioni semplici di estrazione, ma abbiamo soprattutto analizzato come sia possible combinare insieme due diverse condizioni. In AND: entrambe le condizioni devono essere soddisfatte; in OR: è sufficiente che lo sia una delle due. Sono possibili anche condizioni più complesse: ad esempio, due condizioni in AND fra loro, combinate con una condizione in OR. Un esempio potrebbe essere che il cognome inizi con B o con N e che contemporaneamente a questa alternativa, l'id sia maggiore di un dato valore. Bisogna stare molto attenti alle parentesi in questa gestione, per essere sicuri che Access sviluppi le condizioni esattamente come si desidera, e non utilizzi invece degli standard che non sono quelli che desideriamo.

Anche in questa lezione abbiamo imparato qualcosa di interessante. Possiamo, soddisfatti, chiudere la nostra query e salvare le modifiche, prima di chiudere anche Access.

Indietro Avanti Ripeti Inizio Aiuto Esci