SQLite-WHERE句

SQLite WHERE 句は、1つまたは複数のテーブルからデータをフェッチする際の条件を指定するために使用されます。

指定された条件が満たされた場合、つまりtrueの場合、テーブルから特定の値を返します。WHERE句を使用してレコードをフィルタリングし、必要なレコードのみをフェッチする必要があります。

WHERE句は、SELECTステートメントで使用されるだけでなく、UPDATE、DELETEステートメントなどでも使用されます。これらについては、以降の章で説明します。

構文

以下は、WHERE句を使用したSQLiteSELECTステートメントの基本的な構文です。

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

>、<、=、LIKE、NOTなどの比較演算子または論理演算子を使用して条件を指定できます。次のレコードを持つCOMPANYテーブルを検討してください-

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

以下は、SQLite論理演算子の使用法を示す簡単な例です。次のSELECTステートメントは、AGEが25以上であるすべてのレコードをリストします。AND 給与が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

次のSELECTステートメントは、AGEが25以上であるすべてのレコードをリストします。 OR 給与が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

次のSELECTステートメントは、AGEがNULLでないすべてのレコードをリストします。これは、どのレコードにもNULLに等しいAGEがないため、すべてのレコードを意味します。

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

次のSELECTステートメントは、NAMEが「Ki」で始まるすべてのレコードを一覧表示します。「Ki」の後に何が続くかは関係ありません。

sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

次のSELECTステートメントは、NAMEが「Ki」で始まるすべてのレコードを一覧表示します。「Ki」の後に何が続くかは関係ありません。

sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

次のSELECTステートメントは、AGE値が25または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

次のSELECTステートメントは、AGE値が25でも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

次のSELECTステートメントは、AGE値が25と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

次のSELECTステートメントはSQLサブクエリを使用します。この場合、サブクエリはSALARY> 65000以降のAGEフィールドを持つすべてのレコードを検索します。WHERE句はEXISTS演算子とともに使用され、外部クエリからのAGEが存在するすべてのレコードを一覧表示します。サブクエリによって返される結果で-

sqlite> SELECT AGE FROM COMPANY 
   WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

AGE
----------
32
25
23
25
27
22
24

次のSELECTステートメントはSQLサブクエリを使用します。サブクエリはSALARY> 65000以降のAGEフィールドを持つすべてのレコードを検索します。WHERE句は>演算子とともに使用され、外部クエリからのAGEが大きいすべてのレコードを一覧表示します。サブクエリによって返される結果の年齢よりも。

sqlite> SELECT * FROM COMPANY 
   WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0