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