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 |
|
|
|