Filtrare con WHERE e IN

Gli argomenti di questa pagina

  • Operatore IN: verifica di appartenenza
  • Codice per eseguire le Query
  • Esempi con l'operatore IN

In questa pagina vedremo alcuni esempi da risolvere con la clausola IN.

Operatore IN: verifica di appartenenza

È possibile utilizzare l'operatore IN per verificare se un valore corrisponde ad almeno uno dei valori indicati in una lista. Il predicato di appartenenza implica un confronto di uguaglianza tra il valore in esame ed almeno uno dei valori indicati nella lista e valgono le stesse regole applicate all'ìoperatore di uguaglianza ( = ).
L'operatore IN consente di stabilire se un valore corrisponde ad almeno uno dei valori elencati in una lista.
La sintassi:

WHERE valore IN (value1, value2, ...)

Codice per eseguire le Query

Tutte le Query presentate come esempi possono essere 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 IN

Mostra tutti i contatti che abitano nelle province di RO, AT, DE

esempio 1
1
2
3
4
5
6
7
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE prov
IN ('RO', 'AT', 'DE')
"
;
?>
19 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
25 006_fam_002 Zama Walter VIA DEL TUSCOLANO, 1 21049 AbanoTerme AT 1999-08-13 07 01730
41 500_conosc_000 Arquati Dorotea VIA PO, 31 21049 AbanoTerme AT 1995-08-27 057 45254
56 201_amico_000 Di Bartolomeo Onorino VIA TRAVERSETOLO 2/A 85022 Condofuri RO 1988-07-02 05 0484
57 500_conosc_000 Helvetia Italia VIA DEL TUSCOLANO 1 85022 Condofuri RO 2002-08-12 05 7983
58 500_conosc_000 Wagner Federico VIA SABIN 34/2 85022 Condofuri RO 2011-11-14 06 1865
59 500_conosc_000 Valsaca Emilio VIA DEI GERANI 85022 Condofuri RO 2005-09-26 07 01730
76 600_medico_000 Costanza Antonietta VIA DEL TUSCOLANO 1 56020 Giusvalla DE 2009-08-11 06 9152
77 600_medico_000 Baroni Fernando VIA MARCHESANE, 232 21049 AbanoTerme AT 2012-12-21 047 9808044
78 600_medico_000 Alama Ornella VIA SABIN 34/2 56020 Giusvalla DE 1988-05-11 099 85960826
79 600_medico_000 Rosella Enrico VIA DEL TUSCOLANO 1 56020 Giusvalla DE 1997-04-09 06 1865
88 900_ufficio_000 Zarbo Veriano VIA DEL TUSCOLANO 1 46011 Agropoli DE 1994-10-08 07 30090
89 500_conosc_000 D'Agate Federica VIA BREDINA 6 46011 Agropoli DE 1994-10-06 057 4525450
90 800_tecnico_000 Clotilde Marinella VIA.GIUSEPPE DI VITTORIO, 41 46011 Agropoli DE 1994-04-05 06 9152
91 600_medico_000 Biancarosa Francesca VIA PO, 31 46011 Agropoli DE 1956-09-05 047 9808044
92 600_medico_000 Burranca Cristian VIA BRIGONI, 6 46011 Agropoli DE 2009-08-16 099 85960826
... ... ... ... ... ... ... ... ... ...

L'operatore IN, in questo e negli altri esempi, è un buon sostituto dell'operatore OR come mostrato in questo esempio che svolge lo stesso compito di quello appena visto.

esempio 1a
1
2
3
4
5
6
7
8
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE prov = 'RO' OR 
prov = 'AT' OR
prov = 'DE'
"
;
?>
19 record trovati
15 record visualizzati
id codice cognome nome indirizzo cap citta prov data_nascita telefono
25 006_fam_002 Zama Walter VIA DEL TUSCOLANO, 1 21049 AbanoTerme AT 1999-08-13 07 01730
41 500_conosc_000 Arquati Dorotea VIA PO, 31 21049 AbanoTerme AT 1995-08-27 057 45254
56 201_amico_000 Di Bartolomeo Onorino VIA TRAVERSETOLO 2/A 85022 Condofuri RO 1988-07-02 05 0484
57 500_conosc_000 Helvetia Italia VIA DEL TUSCOLANO 1 85022 Condofuri RO 2002-08-12 05 7983
58 500_conosc_000 Wagner Federico VIA SABIN 34/2 85022 Condofuri RO 2011-11-14 06 1865
59 500_conosc_000 Valsaca Emilio VIA DEI GERANI 85022 Condofuri RO 2005-09-26 07 01730
76 600_medico_000 Costanza Antonietta VIA DEL TUSCOLANO 1 56020 Giusvalla DE 2009-08-11 06 9152
77 600_medico_000 Baroni Fernando VIA MARCHESANE, 232 21049 AbanoTerme AT 2012-12-21 047 9808044
78 600_medico_000 Alama Ornella VIA SABIN 34/2 56020 Giusvalla DE 1988-05-11 099 85960826
79 600_medico_000 Rosella Enrico VIA DEL TUSCOLANO 1 56020 Giusvalla DE 1997-04-09 06 1865
88 900_ufficio_000 Zarbo Veriano VIA DEL TUSCOLANO 1 46011 Agropoli DE 1994-10-08 07 30090
89 500_conosc_000 D'Agate Federica VIA BREDINA 6 46011 Agropoli DE 1994-10-06 057 4525450
90 800_tecnico_000 Clotilde Marinella VIA.GIUSEPPE DI VITTORIO, 41 46011 Agropoli DE 1994-04-05 06 9152
91 600_medico_000 Biancarosa Francesca VIA PO, 31 46011 Agropoli DE 1956-09-05 047 9808044
92 600_medico_000 Burranca Cristian VIA BRIGONI, 6 46011 Agropoli DE 2009-08-16 099 85960826
... ... ... ... ... ... ... ... ... ...

Mostra tutti i contatti che hanno i cognomi Poggi o Scicchitano o quelli che hanno i nomi Andrea o Enrico

esempio 2
1
2
3
4
5
6
7
8
9
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE cognome
IN ('Poggi', 'Scicchitano')
OR nome
IN ('Andrea', 'Enrico')
"
;
?>
11 record trovati
11 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
16 005_fam_001 Boscati Andrea VIA MATTEO RICCI, 12 51021 Ville di Fano RF 1994-08-27 02 7115
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
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
69 500_conosc_000 Torricelli Andrea VIA DEL TUSCOLANO 1 26020 Giusvalla CA 1995-01-28 03 98504
79 600_medico_000 Rosella Enrico VIA DEL TUSCOLANO 1 56020 Giusvalla DE 1997-04-09 06 1865
84 600_medico_000 Forlini Andrea VIA DEI GERANI 26020 Giusvalla CA 1948-12-24 065 65701065

Mostra tutti i contatti che hanno i cognomi Poggi o Scicchitano ed i nomi Andrea o Enrico

Questa richiesta è una variante di quella immediatamente sopra.
Tuttavia, mentre prima si chiedeva l'elenco dei contatti con specifici cognomi o con specifici nomi, ora si chiede un elenco degli utenti che abbiano specifici cognomi e specifici nomi.
Questo per mostrare la differenza che può stare nell'uso dell'operatore AND piuttosto che l'operatore OR.

esempio 3
1
2
3
4
5
6
7
8
9
<?php
$Query 
"SELECT *
FROM sql_rubrica
WHERE cognome
IN ('Poggi', 'Scicchitano')
AND nome
IN ('Andrea', 'Enrico')
"
;
?>
1 record trovati
1 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

 

 



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