English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SQLite WHEREПредложение используется для указания условий выбора данных из одной или нескольких таблиц.
Если выполняется заданное условие, то оно возвращает истинное значение, и из таблицы будет возвращен определенный набор значений. Вам нужно будет использовать предложение WHERE для фильтрации записей и извлечения только необходимых записей.
Предложение WHERE используется не только в SELECT-запросах, но и в запросах UPDATE, DELETE и т.д., что будет рассмотрено в后续 главах.
Это базовая грамматика SQLite SELECT-запроса с предложением WHERE.
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 и SALARY (зарплата) больше или равна 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 Или Все записи, где SALARY (зарплата) больше или равна 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子查询,其中子查询查找AGE(年龄)字段的SALARY大于65000的所有记录,随后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大于子查询返回的结果中的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