Filtrare con WHERE e BETWEEN

Gli argomenti di questa pagina

  • Operatore BETWEEN: verifica intervallo
  • Codice per eseguire le Query
  • Esempi con l'operatore BETWEEN

Oltre che coi predicati di confronto che abbiamo visto nella pagina precedente, è possiblie creare condizioni di ricerca con altri predicati:

  • BETWEEN per verificare se un valore o un'espressione è compresa nell'intervallo di due valori
  • IN per verificare se un valore corrisponde ad uno dei valori indicati in una lista
  • LIKE per verificare se un valore (stringa) corrisponde ad un pattern di tipo stringa

In questa pagina vedremo alcuni esempi da risolvere con BETWEEN

Operatore BETWEEN: verifica intervallo

Con l'operatore BETWEEN la condizione risulta soddisfatta per le righe che hanno il valore della colonna specificata compreso in un certo intervallo. L'operatore BETWEEN esegue una selezione uando un range di valori compresi fra due estremi inclusi.
La sintassi:

valore BETWEEN min AND max

valore è il valore in esame che deve essere maggiore o uguale a min e inferiore o uguale a max

Codice per eseguire le Query

Tutte le Query presentate come esempi sono eseguite da questo script.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
include ('res/db_login.php');
if (!
$link mysql_connect($Host$User$Password)) {
    echo 
mysql_error() . "<br />\n"
} else {
    if (!
mysql_select_db($DBName)) {
        echo 
mysql_error() . "<br />\n"
    } else {
        
mysql_set_charset("utf8");
        if (
$result mysql_query($Query)) {
            
$num_row mysql_num_rows($result);
            
$numfields mysql_num_fields($result);
            
$fields = array();
            for (
$i=0$i $numfields$i++) {
                
$fields[] = mysql_field_name($result$i);
            }
            if (
$num_row 0) {
                echo 
$num_row " record letti<br />\n";
                echo 
"<table class=\"tabella_it\">\n";        
                echo 
"<tr>\n";
                for (
$i=0$i $numfields$i++) {
                    echo 
"<th>" $fields[$i] . "</th>\n";
                }
                echo 
"</tr>\n";
                while (
$row mysql_fetch_array($result)) {
                    echo 
"<tr>\n";
                    for (
$i=0$i $numfields$i++) {
                        echo 
"<td>";
                        echo 
is_null($row[$fields[$i]]) ? 'NULL' $row[$fields[$i]];
                        echo 
"</td>\n";
                    }
                    echo 
"</tr>\n";
                }
                echo 
"</table>\n";
            } else {
                echo 
"Nessun record restituito<br />\n";
            }
        } else {
            echo 
mysql_error() . "<br />\n"
        }
    }
}
mysql_close ($link);

Esempi con l'operatore BETWEEN

Per gli esempi che seguono mi limiterò ad esporre un quesito da tradurre in una Query. Per motivi di spazio il massimo numero di record mostrati per ogni Query sarà 10

Mostra tutti i contatti che sono nati in Gennaio e Febbraio

esempio 1
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE MONTH( data_nascita )
BETWEEN 1 AND 2"
;
?>
17 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
1 201_parente_000 Migliavacca Luigi VIA P. FIMIANI TRIVIO 35031 Varena AE 2004-01-22 084 41655
3 002_fam_020 Liberali Franca VIA DEL TUSCOLANO, 1 67030 Abbadia Lariana AB 2004-02-20 036 348719
5 003_fam_002 Scicchitano Andrea VIA SABIN, 34/2 51021 Ville di Fano RF 1997-01-12 07 74891
10 004_fam_002 Poggi Giuseppe VIA SABIN, 34/2 67030 Abbadia Lariana AB 1987-01-25 08 0640120
19 005_fam_030 Dionisio Andrea VIA DEL TUSCOLANO, 1 51023 San Leonardo in Passiria RF 2000-01-28 06 0798
21 204_parente_000 Orlandi Enrico STRADA MARCHESANE, 434 51021 Ville di Fano RF 2001-02-13 012 6780
30 200_parente_000 Carribi Domenica VIA GRAMSCI, 14 A 94014 Bevagna TA 1989-01-28 05 7983
35 200_parente_000 Buscetti Editta VIA GRAMSCI, 14 A 94014 Bevagna TA 2003-01-25 03 98504
44 500_conosc_000 Stipa Agnese VIA DEL TUSCOLANO 1 89844 Castel Vittorio CH 1990-01-28 099 8596
51 201_amico_001 De Paula Loredana VIA DEL TUSCOLANO 1 94014 Bevagna TA 2000-01-20 09 379786
60 500_conosc_000 Zerlenga Francesco VIA GRAMSCI 14 A 67030 Abbadia Lariana AB 2002-01-25 06 0798
69 500_conosc_000 Torricelli Andrea VIA DEL TUSCOLANO 1 26020 Giusvalla CA 1995-01-28 03 98504
71 500_conosc_000 Zeva Oronza VIA CAVOUR 26020 Giusvalla CA 2001-02-13 056 94755484
74 900_ufficio_000 Uberti Federico VIA SABIN, 34/2 36020 Giusvalla LM 1947-01-12 07 30090
81 600_medico_000 Vitulano Vincenzo VIA TRAVERSETOLO 2/A 26020 Giusvalla CA 1951-02-15 01 38408526
... ... ... ... ... ... ... ... ... ...

L'operatore BETWEEN, in questo e negli altri esempi, è un buon sostituto dell'operatore AND come mostrato in questo esempio che replica l'esempio appena visto

esempio 1a
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE MONTH( data_nascita ) >= 1 
AND MONTH( data_nascita ) <=2"
;
?>
17 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
1 201_parente_000 Migliavacca Luigi VIA P. FIMIANI TRIVIO 35031 Varena AE 2004-01-22 084 41655
3 002_fam_020 Liberali Franca VIA DEL TUSCOLANO, 1 67030 Abbadia Lariana AB 2004-02-20 036 348719
5 003_fam_002 Scicchitano Andrea VIA SABIN, 34/2 51021 Ville di Fano RF 1997-01-12 07 74891
10 004_fam_002 Poggi Giuseppe VIA SABIN, 34/2 67030 Abbadia Lariana AB 1987-01-25 08 0640120
19 005_fam_030 Dionisio Andrea VIA DEL TUSCOLANO, 1 51023 San Leonardo in Passiria RF 2000-01-28 06 0798
21 204_parente_000 Orlandi Enrico STRADA MARCHESANE, 434 51021 Ville di Fano RF 2001-02-13 012 6780
30 200_parente_000 Carribi Domenica VIA GRAMSCI, 14 A 94014 Bevagna TA 1989-01-28 05 7983
35 200_parente_000 Buscetti Editta VIA GRAMSCI, 14 A 94014 Bevagna TA 2003-01-25 03 98504
44 500_conosc_000 Stipa Agnese VIA DEL TUSCOLANO 1 89844 Castel Vittorio CH 1990-01-28 099 8596
51 201_amico_001 De Paula Loredana VIA DEL TUSCOLANO 1 94014 Bevagna TA 2000-01-20 09 379786
60 500_conosc_000 Zerlenga Francesco VIA GRAMSCI 14 A 67030 Abbadia Lariana AB 2002-01-25 06 0798
69 500_conosc_000 Torricelli Andrea VIA DEL TUSCOLANO 1 26020 Giusvalla CA 1995-01-28 03 98504
71 500_conosc_000 Zeva Oronza VIA CAVOUR 26020 Giusvalla CA 2001-02-13 056 94755484
74 900_ufficio_000 Uberti Federico VIA SABIN, 34/2 36020 Giusvalla LM 1947-01-12 07 30090
81 600_medico_000 Vitulano Vincenzo VIA TRAVERSETOLO 2/A 26020 Giusvalla CA 1951-02-15 01 38408526
... ... ... ... ... ... ... ... ... ...

Mostra tutti i contatti che sono nati tra il 2000 ed il 2005

esempio 2
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE YEAR( data_nascita )
BETWEEN 2000 AND 2005"
;
?>
20 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
1 201_parente_000 Migliavacca Luigi VIA P. FIMIANI TRIVIO 35031 Varena AE 2004-01-22 084 41655
3 002_fam_020 Liberali Franca VIA DEL TUSCOLANO, 1 67030 Abbadia Lariana AB 2004-02-20 036 348719
15 004_fam_030 Maini Marilena MACRON TICHON STREET, 27 57020 Borgo S. Dalmazzo BO 2002-03-20 02 6638
18 005_fam_020 Scicchitano Pierluigi STRADA MARCHESANE, 434 67030 Abbadia Lariana AB 2003-05-02 06 55850
19 005_fam_030 Dionisio Andrea VIA DEL TUSCOLANO, 1 51023 San Leonardo in Passiria RF 2000-01-28 06 0798
20 005_fam_040 Traina Giovanni VIA SABIN, 34/2 51021 Ville di Fano RF 2005-06-06 037 20398
21 204_parente_000 Orlandi Enrico STRADA MARCHESANE, 434 51021 Ville di Fano RF 2001-02-13 012 6780
23 204_parente_000 Poggi Claudio STRADA MARCHESANE, 434 51021 Ville di Fano RF 2004-09-05 05 7983
27 006_fam_020 Broccardo Andrea VIA MARCHESANE, 232 67030 Abbadia Lariana AB 2002-11-22 037 20398
28 001_fam_000 Castagna Attilio VIA SABIN, 34/2 94014 Bevagna TA 2001-08-20 012 6780
33 200_parente_000 Derosa Valeria VIA SABIN, 34/2 94014 Bevagna TA 2001-11-14 01 38408526
34 200_parente_000 Basilio Davide VIA DEI GERANI 94014 Bevagna TA 2000-09-26 021 7153
35 200_parente_000 Buscetti Editta VIA GRAMSCI, 14 A 94014 Bevagna TA 2003-01-25 03 98504
49 500_conosc_000 Mongelli Natalina VIA SABIN, 34/2 94014 Bevagna TA 2001-04-16 08 0640120
51 201_amico_001 De Paula Loredana VIA DEL TUSCOLANO 1 94014 Bevagna TA 2000-01-20 09 379786
... ... ... ... ... ... ... ... ... ...

Mostra tutti i contatti il cui nome ha le iniziali da "c" a "e"

esempio 3
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE nome
BETWEEN 'c' AND 'ez'"
;
?>
17 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
2 002_fam_010 Rizzi Carlo VIA SABIN, 34/2 35031 Varena AE 2007-11-22 07 9940508
21 204_parente_000 Orlandi Enrico STRADA MARCHESANE, 434 51021 Ville di Fano RF 2001-02-13 012 6780
23 204_parente_000 Poggi Claudio STRADA MARCHESANE, 434 51021 Ville di Fano RF 2004-09-05 05 7983
30 200_parente_000 Carribi Domenica VIA GRAMSCI, 14 A 94014 Bevagna TA 1989-01-28 05 7983
34 200_parente_000 Basilio Davide VIA DEI GERANI 94014 Bevagna TA 2000-09-26 021 7153
35 200_parente_000 Buscetti Editta VIA GRAMSCI, 14 A 94014 Bevagna TA 2003-01-25 03 98504
37 401_amico_000 Bianchi Emilio VIA SABIN, 34/2 89844 Castel Vittorio CH 2009-08-19 056 94755
41 500_conosc_000 Arquati Dorotea VIA PO, 31 21049 AbanoTerme AT 1995-08-27 057 45254
54 201_amico_001 Serva Clemente VIA DEL TUSCOLANO 1 95022 Condofuri DO 1993-05-22 02 6638
59 500_conosc_000 Valsaca Emilio VIA DEI GERANI 85022 Condofuri RO 2005-09-26 07 01730
73 800_tecnico_000 Bronzi Edoardo VIA SABIN 34/2 26020 Giusvalla CA 1988-09-05 034 4741
79 600_medico_000 Rosella Enrico VIA DEL TUSCOLANO 1 56020 Giusvalla DE 1997-04-09 06 1865
85 600_medico_000 Pioggia Ernesto VIA GRAMSCI 14 A 26020 Giusvalla CA 2012-12-15 056 94755484
92 600_medico_000 Burranca Cristian VIA BRIGONI, 6 46011 Agropoli DE 2009-08-16 099 85960826
96 500_conosc_000 Serrone Diamora VIA CAVOUR 46011 Agropoli DE 2012-12-20 044 5602773
... ... ... ... ... ... ... ... ... ...

Mostra tutti i contatti nati nel 2004

esempio 4
1
2
3
4
5
6
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE data_nascita
BETWEEN '2004-1-1' AND '2004-12-31'"
;
?>
4 record trovati
4 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
1 201_parente_000 Migliavacca Luigi VIA P. FIMIANI TRIVIO 35031 Varena AE 2004-01-22 084 41655
3 002_fam_020 Liberali Franca VIA DEL TUSCOLANO, 1 67030 Abbadia Lariana AB 2004-02-20 036 348719
23 204_parente_000 Poggi Claudio STRADA MARCHESANE, 434 51021 Ville di Fano RF 2004-09-05 05 7983
70 500_conosc_000 Salazar Ornella VIA DELLA CHIMICA N.9 26020 Giusvalla CA 2004-06-06 065 65701065

Mostra tutti i contatti nati tra il 1950 ed il 2000 nei mesi che vanno da Gennaio a Giugno

esempio 5
1
2
3
4
5
6
7
8
<?php
$Query 
"SELECT *  
FROM sql_rubrica            
WHERE MONTH(data_nascita) 
BETWEEN '01' AND '06'   
AND YEAR(data_nascita) 
BETWEEN 1950 AND 2000"
;
?>
29 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
5 003_fam_002 Scicchitano Andrea VIA SABIN, 34/2 51021 Ville di Fano RF 1997-01-12 07 74891
10 004_fam_002 Poggi Giuseppe VIA SABIN, 34/2 67030 Abbadia Lariana AB 1987-01-25 08 0640120
11 004_fam_010 Curti Oreste STRADA MARCHESANE, 43_4 51021 Ville di Fano RF 1988-06-26 027 42781
19 005_fam_030 Dionisio Andrea VIA DEL TUSCOLANO, 1 51023 San Leonardo in Passiria RF 2000-01-28 06 0798
24 006_fam_001 Ravizzola Stefano VIA CAVOUR 71021 Coccanile BO 1988-04-16 06 1865
29 201_parente_000 Sarmento Morena VIA DEL TUSCOLANO, 1 94014 Bevagna TA 1999-05-21 06 957871
30 200_parente_000 Carribi Domenica VIA GRAMSCI, 14 A 94014 Bevagna TA 1989-01-28 05 7983
36 200_parente_000 Bialetti Vincenzo VIA CAVOUR 94014 Bevagna TA 1994-06-22 065 65701
40 401_amico_000 Corba Salvatore VIA.GIUSEPPE DI VITTORIO, 41 89844 Castel Vittorio CH 1994-03-20 07 30090
43 500_conosc_000 Cecire Valentina VIA DEI GERANI 89844 Castel Vittorio CH 1988-05-02 047 9808
44 500_conosc_000 Stipa Agnese VIA DEL TUSCOLANO 1 89844 Castel Vittorio CH 1990-01-28 099 8596
45 500_conosc_000 Righello Armando VIA DELLA CHIMICA N.9 89844 Castel Vittorio CH 1998-06-06 091 63145
51 201_amico_001 De Paula Loredana VIA DEL TUSCOLANO 1 94014 Bevagna TA 2000-01-20 09 379786
54 201_amico_001 Serva Clemente VIA DEL TUSCOLANO 1 95022 Condofuri DO 1993-05-22 02 6638
61 500_conosc_000 Omede Rina VIA CAVOUR 95022 Condofuri DO 1997-06-26 037 20398405
... ... ... ... ... ... ... ... ... ...

Questa è più difficile:

Mostra tutti i contatti nati tra il 2000 e la data corrente

In questo caso l'intervallo va individuato tra l'anno di inizio e la data attuale che è fornita dalla funzione CURDATE()

esempio 6
1
2
3
4
5
6
<?php
$Query 
"SELECT *  
FROM sql_rubrica            
WHERE YEAR(data_nascita) 
BETWEEN 2000 AND YEAR(CURDATE())"
;
?>
42 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
1 201_parente_000 Migliavacca Luigi VIA P. FIMIANI TRIVIO 35031 Varena AE 2004-01-22 084 41655
2 002_fam_010 Rizzi Carlo VIA SABIN, 34/2 35031 Varena AE 2007-11-22 07 9940508
3 002_fam_020 Liberali Franca VIA DEL TUSCOLANO, 1 67030 Abbadia Lariana AB 2004-02-20 036 348719
4 003_fam_001 Di Maggio Mario TERMINAL CONTENITORI MOLO VII 51021 Ville di Fano RF 2009-05-21 051 18752
7 003_fam_020 Gerardini Silvano Z.I SAMBUCETO 51021 Ville di Fano RF 2009-08-12 012 164848
13 004_fam_020 Franchinotti Anna VIA BREDINA, 6 67030 Abbadia Lariana AB 2009-05-10 062 8880
15 004_fam_030 Maini Marilena MACRON TICHON STREET, 27 57020 Borgo S. Dalmazzo BO 2002-03-20 02 6638
18 005_fam_020 Scicchitano Pierluigi STRADA MARCHESANE, 434 67030 Abbadia Lariana AB 2003-05-02 06 55850
19 005_fam_030 Dionisio Andrea VIA DEL TUSCOLANO, 1 51023 San Leonardo in Passiria RF 2000-01-28 06 0798
20 005_fam_040 Traina Giovanni VIA SABIN, 34/2 51021 Ville di Fano RF 2005-06-06 037 20398
21 204_parente_000 Orlandi Enrico STRADA MARCHESANE, 434 51021 Ville di Fano RF 2001-02-13 012 6780
23 204_parente_000 Poggi Claudio STRADA MARCHESANE, 434 51021 Ville di Fano RF 2004-09-05 05 7983
27 006_fam_020 Broccardo Andrea VIA MARCHESANE, 232 67030 Abbadia Lariana AB 2002-11-22 037 20398
28 001_fam_000 Castagna Attilio VIA SABIN, 34/2 94014 Bevagna TA 2001-08-20 012 6780
31 200_parente_000 Limone Maria VIA TRAVERSETOLO, 2/A 94014 Bevagna TA 2009-05-02 06 1865
... ... ... ... ... ... ... ... ... ...

Mostra tutti i contatti che sono nati prima del 2000

Questa è l'opposto della precedente e, per scegliere le date precedenti al 2000, viene usato l'operatore di negazione NOT per escludere le date comprese tra il 2000 e la data corrente.

esempio 7
1
2
3
4
5
6
<?php
$Query 
"SELECT *  
FROM sql_rubrica            
WHERE YEAR(data_nascita) 
NOT BETWEEN 2000 AND YEAR(CURDATE())"
;
?>
59 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
5 003_fam_002 Scicchitano Andrea VIA SABIN, 34/2 51021 Ville di Fano RF 1997-01-12 07 74891
6 003_fam_010 Edelvisi Maurizio VIA MATTEO RICCI, 12 51021 Ville di Fano RF 1987-07-02 079 89428
8 500_conosc_000 Pasotti Alessio VIA SABIN, 34/2 22050 Correzzana FS 1987-11-14 05 9552713
9 004_fam_001 Calvi Giovanni VIA SABIN, 34/2 53021 Marsiliana AB 1987-07-26 044 5602773
10 004_fam_002 Poggi Giuseppe VIA SABIN, 34/2 67030 Abbadia Lariana AB 1987-01-25 08 0640120
11 004_fam_010 Curti Oreste STRADA MARCHESANE, 43_4 51021 Ville di Fano RF 1988-06-26 027 42781
12 004_fam_021 Borsotti Mirella VIA DEL TUSCOLANO, 1 51021 Ville di Fano RF 1987-07-19 09 379786
14 500_conosc_000 Pischedda Giovanni VIA MATTEO RICCI, 12 22059 Falconara Alta FS 1999-08-08 07 628585
16 005_fam_001 Boscati Andrea VIA MATTEO RICCI, 12 51021 Ville di Fano RF 1994-08-27 02 7115
17 005_fam_010 Bazzotti Pietro VIA SABIN, 34/2 67030 Abbadia Lariana AB 1987-07-17 05 0484
22 204_parente_000 Odelli Giuseppe VIA CAVOUR 73020 Cereseto BO 1987-07-16 06 957871
24 006_fam_001 Ravizzola Stefano VIA CAVOUR 71021 Coccanile BO 1988-04-16 06 1865
25 006_fam_002 Zama Walter VIA DEL TUSCOLANO, 1 21049 AbanoTerme AT 1999-08-13 07 01730
26 006_fam_010 Branda Anna Maria VIA DEL TUSCOLANO, 1 94014 Bevagna TA 1999-08-22 06 0798
29 201_parente_000 Sarmento Morena VIA DEL TUSCOLANO, 1 94014 Bevagna TA 1999-05-21 06 957871
... ... ... ... ... ... ... ... ... ...

Per scegliere un intervallo di date è possibile usare anche questa forma indicando nell'intervallo la data completa ma nel formato MYSQL (aaaa-mm-gg)

Mostra i contatti nati nell'intervallo di date che indico (CURDATE è la data corrente)

esempio 8
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$Query1 
"SELECT cognome, nome, data_nascita
FROM sql_rubrica
WHERE data_nascita
BETWEEN '2009-05-01'
AND '2009-05-31'"
;

$Query2 "SELECT cognome, nome, data_nascita
FROM sql_rubrica
WHERE data_nascita
BETWEEN '2000-01-01'
AND CURDATE()"
;
?>
7 record trovati
7 record visualizzati
cognome nome data_nascita
Di Maggio Mario 2009-05-21
Franchinotti Anna 2009-05-10
Limone Maria 2009-05-02
Pasquone Maria 2009-05-08
Rosmunda Marina 2009-05-13
Brunetti Pierpaolo 2009-05-08
Lomo Dalia 2009-05-15
42 record trovati
15 record visualizzati
cognome nome data_nascita
Migliavacca Luigi 2004-01-22
Rizzi Carlo 2007-11-22
Liberali Franca 2004-02-20
Di Maggio Mario 2009-05-21
Gerardini Silvano 2009-08-12
Franchinotti Anna 2009-05-10
Maini Marilena 2002-03-20
Scicchitano Pierluigi 2003-05-02
Dionisio Andrea 2000-01-28
Traina Giovanni 2005-06-06
Orlandi Enrico 2001-02-13
Poggi Claudio 2004-09-05
Broccardo Andrea 2002-11-22
Castagna Attilio 2001-08-20
Limone Maria 2009-05-02
... ... ...

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum