sqlite3学习之where子句&AND/OR 运算符&Like 子句&Glob 子句

SQLite的 WHERE 子句用于指定从一个表或多个表中获取数据的条件。如果满足给定的条件,即为真(true)时,则从表中返回特定的值。我们可以使用 WHERE 子句来过滤记录,只获取需要的记录。WHERE 子句不仅可用在 SELECT 语句中,它也可用在 UPDATE、DELETE 语句中,等等,来看下语法格式:

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

来看实例:

#AGE 大于等于 25 且工资大于等于 65000.00 的所有记录
SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

# AGE 大于等于 25 或工资大于等于 65000.00 的所有记录
SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

#AGE 不为 NULL 的所有记录,结果显示所有的记录,意味着没有一个记录的 AGE 等于 NULL
SELECT * FROM COMPANY WHERE AGE IS NOT NULL;

#NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制
SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';

#NAME 以 'Ki' 开始的所有记录,'Ki' 之后的字符不做限制
SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';

#AGE 的值为 25 或 27 的所有记录
SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );

#AGE 的值既不是 25 也不是 27 的所有记录
SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );

#AGE 的值在 25 与 27 之间的所有记录
SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;

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

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

SQLite 的 ANDOR 运算符用于编译多个条件来缩小在 SQLite 语句中所选的数据。这两个运算符被称为连接运算符。这些运算符为同一个 SQLite 语句中不同的运算符之间的多个比较提供了可能。

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

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

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

#AGE 大于等于 25 且工资大于等于 65000.00 的所有记录
SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;

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

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

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

#AGE 大于等于 25 或工资大于等于 65000.00 的所有记录
SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;

SQLite 的 LIKE 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,LIKE 运算符将返回真(true),也就是 1,其中,百分号(%)和下划线(_)这两个通配符与 LIKE 运算符一起使用,百分号(%)代表零个、一个或多个数字或字符。下划线(_)代表一个单一的数字或字符,它们可以被组合使用,来看% 和 _ 的基本语法:

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX%'

or 

SELECT column_list 
FROM table_name
WHERE column LIKE '%XXXX%'

or

SELECT column_list 
FROM table_name
WHERE column LIKE 'XXXX_'

or

SELECT column_list 
FROM table_name
WHERE column LIKE '_XXXX'

or

SELECT column_list 
FROM table_name
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 结尾的任意值

来看实例:

#AGE 以 2 开头的所有记录
SELECT * FROM COMPANY WHERE AGE  LIKE '2%';

#ADDRESS 文本里包含一个连字符(-)的所有记录
SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';

SQLite 的 GLOB 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于通配符星号(*)和问号(?),它遵循 UNIX 的语法,星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用,来看* 和 ? 的基本语法:

SELECT FROM table_name
WHERE column GLOB 'XXXX*'

or 

SELECT FROM table_name
WHERE column GLOB '*XXXX*'

or

SELECT FROM table_name
WHERE column GLOB 'XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX'

or

SELECT FROM table_name
WHERE column GLOB '?XXXX?'

or

SELECT FROM table_name
WHERE column GLOB '????'

我们可以使用 AND 或 OR 运算符来结合 N 个数量的条件。上述代码中,XXXX 可以是任何数字或字符串值。

来看下带有 '*' 和 '?' 运算符的 GLOB 子句不同的地方:

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

来看实例:

#AGE 以 2 开头的所有记录
SELECT * FROM COMPANY WHERE AGE  GLOB '2*';

#ADDRESS 文本里包含一个连字符(-)的所有记录
SELECT * FROM COMPANY WHERE ADDRESS  GLOB '*-*';

好啦,本次记录就到这里了。

如果感觉不错的话,请多多点赞支持哦。。。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值