English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник SQLite

Уровеньный учебник SQLite

Программный интерфейс SQLite

WHERE-пункт SQLite

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