SQLite - clausola WHERE
SQLite WHERE viene utilizzata per specificare una condizione durante il recupero dei dati da una o più tabelle.
Se la condizione data è soddisfatta, significa vero, restituisce il valore specifico dalla tabella. Dovrai utilizzare la clausola WHERE per filtrare i record e recuperare solo i record necessari.
La clausola WHERE non solo viene utilizzata nell'istruzione SELECT, ma viene anche utilizzata nell'istruzione UPDATE, DELETE e così via, che verranno trattate nei capitoli successivi.
Sintassi
Di seguito è riportata la sintassi di base dell'istruzione SELECT di SQLite con la clausola WHERE.
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
Esempio
È possibile specificare una condizione utilizzando il confronto o gli operatori logici come>, <, =, LIKE, NOT, ecc. Considera la tabella COMPANY con i seguenti record:
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Di seguito sono riportati semplici esempi che mostrano l'utilizzo degli operatori logici SQLite. La seguente istruzione SELECT elenca tutti i record in cui AGE è maggiore o uguale a 25AND lo stipendio è maggiore o uguale a 65000,00.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
La seguente istruzione SELECT elenca tutti i record in cui AGE è maggiore o uguale a 25 OR lo stipendio è maggiore o uguale a 65000,00.
sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
La seguente istruzione SELECT elenca tutti i record in cui AGE non è NULL, il che significa che tutti i record perché nessuno dei record ha AGE uguale a NULL.
sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
La seguente istruzione SELECT elenca tutti i record in cui NAME inizia con "Ki", non importa cosa viene dopo "Ki".
sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
6 Kim 22 South-Hall 45000.0
La seguente istruzione SELECT elenca tutti i record in cui NAME inizia con "Ki", non importa cosa viene dopo "Ki".
sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
6 Kim 22 South-Hall 45000.0
La seguente istruzione SELECT elenca tutti i record in cui il valore AGE è 25 o 27.
sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
La seguente istruzione SELECT elenca tutti i record in cui il valore AGE non è né 25 né 27.
sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0
3 Teddy 23 Norway 20000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
La seguente istruzione SELECT elenca tutti i record in cui il valore AGE è compreso tra 25 e 27.
sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
2 Allen 25 Texas 15000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
La seguente istruzione SELECT utilizza la sottoquery SQL, dove la sottoquery trova tutti i record con il campo AGE con SALARY> 65000 e successiva viene utilizzata la clausola WHERE insieme all'operatore EXISTS per elencare tutti i record in cui esiste AGE dalla query esterna nel risultato restituito dalla sottoquery -
sqlite> SELECT AGE FROM COMPANY
WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
AGE
----------
32
25
23
25
27
22
24
La seguente istruzione SELECT utilizza la sottoquery SQL in cui la sottoquery trova tutti i record con il campo AGE con SALARY> 65000 e successivamente viene utilizzata la clausola WHERE insieme all'operatore> per elencare tutti i record in cui AGE dalla query esterna è maggiore rispetto all'età nel risultato restituito dalla sottoquery.
sqlite> SELECT * FROM COMPANY
WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
1 Paul 32 California 20000.0