Sqlite-where-clause
SQLite-WHERE句
SQLiteの WHERE 句を使用して、1つまたは複数のテーブルからデータをフェッチするときに条件を指定します。
指定された条件が満たされた場合、trueを意味し、テーブルから特定の値を返します。 WHERE句を使用してレコードをフィルタリングし、必要なレコードのみを取得する必要があります。
WHERE句はSELECTステートメントで使用されるだけでなく、UPDATE、DELETEステートメントなどでも使用されます。これについては、以降の章で説明します。
構文
WHERE句を使用したSQLite SELECTステートメントの基本的な構文は次のとおりです。
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
例
link:/sqlite/sqlite_operators [比較演算子または論理演算子]を使用して、>、<、=、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でないため、すべてのレコードを意味します。
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以降のWHERE句を持つすべてのレコードを検索し、外部クエリからのAGEが存在するすべてのレコードをリストするためにEXISTS演算子とともに使用されます。サブクエリによって返された結果で-
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以降の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