分享

SQLite入门到精通之八:条件语句(Where|AND/OR|Like|Limit)

 剩矿空钱 2024-04-24 发布于湖北

SQLite Where 子句

SQLite的 WHERE 子句用于指定从一个表或多个表中获取数据的条件。

如果满足给定的条件,即为真(true)时,则从表中返回特定的值。您可以使用 WHERE 子句来过滤记录,只获取需要的记录。

WHERE 子句不仅可用在 SELECT 语句中,它也可用在 UPDATE、DELETE 语句中,等等,这些我们将在随后的章节中学习到。

语法

SQLite 的带有 WHERE 子句的 SELECT 语句的基本语法如下:

  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. WHERE [condition]

实例

您还可以使用比较或逻辑运算符指定条件,比如 >、<、=、LIKE、NOT,等等。假设 COMPANY 表有以下记录:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 1 Paul 32 California 20000.0
  4. 2 Allen 25 Texas 15000.0
  5. 3 Teddy 23 Norway 20000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0
  8. 6 Kim 22 South-Hall 45000.0
  9. 7 James 24 Houston 10000.0

下面的实例演示了 SQLite 逻辑运算符的用法。下面的 SELECT 语句列出了 AGE 大于等于 25 工资大于等于 65000.00 的所有记录:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 4 Mark 25 Rich-Mond 65000.0
  5. 5 David 27 Texas 85000.0

下面的 SELECT 语句列出了 AGE 大于等于 25 工资大于等于 65000.00 的所有记录:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 1 Paul 32 California 20000.0
  5. 2 Allen 25 Texas 15000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0

下面的 SELECT 语句列出了 AGE 不为 NULL 的所有记录,结果显示所有的记录,意味着没有一个记录的 AGE 等于 NULL:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 1 Paul 32 California 20000.0
  5. 2 Allen 25 Texas 15000.0
  6. 3 Teddy 23 Norway 20000.0
  7. 4 Mark 25 Rich-Mond 65000.0
  8. 5 David 27 Texas 85000.0
  9. 6 Kim 22 South-Hall 45000.0
  10. 7 James 24 Houston 10000.0

下面的 SELECT 语句列出了 NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制:

  1. sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 6 Kim 22 South-Hall 45000.0

下面的 SELECT 语句列出了 NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制:

  1. sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 6 Kim 22 South-Hall 45000.0

下面的 SELECT 语句列出了 AGE 的值为 25 或 27 的所有记录:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 2 Allen 25 Texas 15000.0
  5. 4 Mark 25 Rich-Mond 65000.0
  6. 5 David 27 Texas 85000.0

下面的 SELECT 语句列出了 AGE 的值既不是 25 也不是 27 的所有记录:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 1 Paul 32 California 20000.0
  5. 3 Teddy 23 Norway 20000.0
  6. 6 Kim 22 South-Hall 45000.0
  7. 7 James 24 Houston 10000.0

下面的 SELECT 语句列出了 AGE 的值在 25 与 27 之间的所有记录:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 2 Allen 25 Texas 15000.0
  5. 4 Mark 25 Rich-Mond 65000.0
  6. 5 David 27 Texas 85000.0

下面的 SELECT 语句使用 SQL 子查询,子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录,后边的 WHERE 子句与 EXISTS 运算符一起使用,列出了外查询中的 AGE 存在于子查询返回的结果中的所有记录:

  1. sqlite> SELECT AGE FROM COMPANY
  2. WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
  3. AGE
  4. ----------
  5. 32
  6. 25
  7. 23
  8. 25
  9. 27
  10. 22
  11. 24

下面的 SELECT 语句使用 SQL 子查询,子查询查找 SALARY > 65000 的带有 AGE 字段的所有记录,后边的 WHERE 子句与 > 运算符一起使用,列出了外查询中的 AGE 大于子查询返回的结果中的年龄的所有记录:

  1. sqlite> SELECT * FROM COMPANY
  2. WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
  3. ID NAME AGE ADDRESS SALARY
  4. ---------- ---------- ---------- ---------- ----------
  5. 1 Paul 32 California 20000.0

SQLite AND/OR 运算符

SQLite 的 AND 和 OR 运算符用于编译多个条件来缩小在 SQLite 语句中所选的数据。这两个运算符被称为连接运算符。

这些运算符为同一个 SQLite 语句中不同的运算符之间的多个比较提供了可能。

AND 运算符

AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。使用 AND 运算符时,只有当所有条件都为真(true)时,整个条件为真(true)。例如,只有当 condition1 和 condition2 都为真(true)时,[condition1] AND [condition2] 为真(true)。

语法

带有 WHERE 子句的 AND 运算符的基本语法如下:

  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. WHERE [condition1] AND [condition2]...AND [conditionN];

您可以使用 AND 运算符来结合 N 个数量的条件。SQLite 语句需要执行的动作是,无论是事务或查询,所有由 AND 分隔的条件都必须为真(TRUE)。

实例

假设 COMPANY 表有以下记录:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 1 Paul 32 California 20000.0
  4. 2 Allen 25 Texas 15000.0
  5. 3 Teddy 23 Norway 20000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0
  8. 6 Kim 22 South-Hall 45000.0
  9. 7 James 24 Houston 10000.0

下面的 SELECT 语句列出了 AGE 大于等于 25 工资大于等于 65000.00 的所有记录:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 4 Mark 25 Rich-Mond 65000.0
  5. 5 David 27 Texas 85000.0

OR 运算符

OR 运算符也用于结合一个 SQL 语句的 WHERE 子句中的多个条件。使用 OR 运算符时,只要当条件中任何一个为真(true)时,整个条件为真(true)。例如,只要当 condition1 或 condition2 有一个为真(true)时,[condition1] OR [condition2] 为真(true)。

语法

带有 WHERE 子句的 OR 运算符的基本语法如下:

  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. WHERE [condition1] OR [condition2]...OR [conditionN]

您可以使用 OR 运算符来结合 N 个数量的条件。SQLite 语句需要执行的动作是,无论是事务或查询,只要任何一个由 OR 分隔的条件为真(TRUE)即可。

实例

假设 COMPANY 表有以下记录:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 1 Paul 32 California 20000.0
  4. 2 Allen 25 Texas 15000.0
  5. 3 Teddy 23 Norway 20000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0
  8. 6 Kim 22 South-Hall 45000.0
  9. 7 James 24 Houston 10000.0

下面的 SELECT 语句列出了 AGE 大于等于 25 工资大于等于 65000.00 的所有记录:

  1. sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
  2. ID NAME AGE ADDRESS SALARY
  3. ---------- ---------- ---------- ---------- ----------
  4. 1 Paul 32 California 20000.0
  5. 2 Allen 25 Texas 15000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0

SQLite Like 子句

SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1。这里有两个通配符与 LIKE 运算符一起使用:

  • 百分号 (%)

  • 下划线 (_)

百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。

语法

% 和 _ 的基本语法如下:

  1. SELECT column_list
  2. FROM table_name
  3. WHERE column LIKE 'XXXX%'
  4. or
  5. SELECT column_list
  6. FROM table_name
  7. WHERE column LIKE '%XXXX%'
  8. or
  9. SELECT column_list
  10. FROM table_name
  11. WHERE column LIKE 'XXXX_'
  12. or
  13. SELECT column_list
  14. FROM table_name
  15. WHERE column LIKE '_XXXX'
  16. or
  17. SELECT column_list
  18. FROM table_name
  19. WHERE column LIKE '_XXXX_'

您可以使用 AND 或 OR 运算符来结合 N 个数量的条件。在这里,XXXX 可以是任何数字或字符串值。

实例

下面一些实例演示了 带有 '%' 和 '_' 运算符的 LIKE 子句不同的地方:

语句描述
WHERE SALARY LIKE '200%'查找以 200 开头的任意值
WHERE SALARY LIKE '%200%'查找任意位置包含 200 的任意值
WHERE SALARY LIKE '_00%'查找第二位和第三位为 00 的任意值
WHERE SALARY LIKE '2_%_%'查找以 2 开头,且长度至少为 3 个字符的任意值
WHERE SALARY LIKE '%2'查找以 2 结尾的任意值
WHERE SALARY LIKE '_2%3'查找第二位为 2,且以 3 结尾的任意值
WHERE SALARY LIKE '2___3'查找长度为 5 位数,且以 2 开头以 3 结尾的任意值

让我们举一个实际的例子,假设 COMPANY 表有以下记录:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 1 Paul 32 California 20000.0
  4. 2 Allen 25 Texas 15000.0
  5. 3 Teddy 23 Norway 20000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0
  8. 6 Kim 22 South-Hall 45000.0
  9. 7 James 24 Houston 10000.0

下面是一个实例,它显示 COMPANY 表中 AGE 以 2 开头的所有记录:

sqlite> SELECT * FROM COMPANY WHERE AGE  LIKE '2%';

这将产生以下结果:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 2 Allen 25 Texas 15000.0
  4. 3 Teddy 23 Norway 20000.0
  5. 4 Mark 25 Rich-Mond 65000.0
  6. 5 David 27 Texas 85000.0
  7. 6 Kim 22 South-Hall 45000.0
  8. 7 James 24 Houston 10000.0

下面是一个实例,它显示 COMPANY 表中 ADDRESS 文本里包含一个连字符(-)的所有记录:

sqlite> SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';

这将产生以下结果:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 4 Mark 25 Rich-Mond 65000.0
  4. 6 Kim 22 South-Hall 45000.0

SQLite Limit 子句

SQLite 的 LIMIT 子句用于限制由 SELECT 语句返回的数据数量。

语法

带有 LIMIT 子句的 SELECT 语句的基本语法如下:

  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. LIMIT [no of rows]

下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法:

  1. SELECT column1, column2, columnN
  2. FROM table_name
  3. LIMIT [no of rows] OFFSET [row num]

SQLite 引擎将返回从下一行开始直到给定的 OFFSET 为止的所有行,如下面的最后一个实例所示。

实例

假设 COMPANY 表有以下记录:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 1 Paul 32 California 20000.0
  4. 2 Allen 25 Texas 15000.0
  5. 3 Teddy 23 Norway 20000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0
  8. 6 Kim 22 South-Hall 45000.0
  9. 7 James 24 Houston 10000.0

下面是一个实例,它限制了您想要从表中提取的行数:

sqlite> SELECT * FROM COMPANY LIMIT 6;

这将产生以下结果:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 1 Paul 32 California 20000.0
  4. 2 Allen 25 Texas 15000.0
  5. 3 Teddy 23 Norway 20000.0
  6. 4 Mark 25 Rich-Mond 65000.0
  7. 5 David 27 Texas 85000.0
  8. 6 Kim 22 South-Hall 45000.0

但是,在某些情况下,可能需要从一个特定的偏移开始提取记录。下面是一个实例,从第三位开始提取 3 个记录:

sqlite> SELECT * FROM COMPANY LIMIT 3 OFFSET 2;

这将产生以下结果:

  1. ID NAME AGE ADDRESS SALARY
  2. ---------- ---------- ---------- ---------- ----------
  3. 3 Teddy 23 Norway 20000.0
  4. 4 Mark 25 Rich-Mond 65000.0
  5. 5 David 27 Texas 85000.0

参考资料:http://www.runoob.com/sqlite/sqlite-tutorial.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多