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