SQLite Where 句

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

指定された条件が満たされた場合、つまり真(true)である場合、テーブルから特定の値が返されます。WHERE 句を使用してレコードをフィルタリングし、必要なレコードだけを取得できます。

WHERE 句は SELECT 文だけでなく、UPDATE、DELETE 文などでも使用できます。これらについては後の章で学習します。

構文

WHERE 句を含む SQLite の SELECT 文の基本構文は次のとおりです:

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 以上且給与が 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 以上或給与が 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 でないすべてのレコードを一覧表示します。結果にはすべてのレコードが表示され、AGE が NULL のレコードが1つもないことを意味します:

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
その他の拡張