跳转至

过滤

条件评估

where 子句可能包含 1 个或多个条件,每个条件之间用操作符 and 和 or 分隔。如果多个条件只使用 and 操作符分隔,那么只有所有条件赋值都为 true 的行才可以被包含到结果集中。如果 where 子句中的所有条件是用 or 操作符分隔的,那么只要其中一个条件成立,相应行就可以被包含到结果集中。

使用圆括号

如果 where 子句包含了 3 个或更多条件,且同时使用了 and 和 or 操作符,那么需要使用圆括号来明确意图,以使数据库服务器或者以后可能阅读你代码的其他开发者能够理解。

使用 not 操作符

尽管对于数据库服务器来说,处理包含 not 操作符的 where 子句毫不费力,但对于开发者来说,增加来条件评估的困难,通常情况下较少使用它。

构建条件

条件通常由的 1 个到多个操作符的表达式构成。表达式可以是下面类型中的任意一个: - 数字 - 表或视图中的列 - 字符串 - 内建函数,比如函数 concat('Learning', 'SQL') - 子查询 - 表达式列表 - 比较操作符 - 算术操作符

条件类型

有许多种方式可以过滤掉不需要的数据,比如通过指定特定值,值集合,需要包含或排除的值的范围,以及在针对字符串数据时,使用各种模式搜索技术来查找部分匹配。

相等条件

例如 'column=expression' 的形式,这些条件被成为相等条件,因为他们将一个表达式等同于另一个表达式。

不等条件

另一种常见的条件类型是不等条件,它用于判断两个表达式不相等。构造不等条件时,可以在 !=<> 操作符中任选一个

使用相等条件修改数据

在修改数据时,经常需要用到相等/不等条件。

范围条件

除了可以检查表达式与另一个表达式是否相等以外,还可以构建条件来检验表达式的值是否处于某个区间。这种类型的条件通常用于数值型或临时数据。

between 操作符

当需要同时限制范围的上限或下限时,可以选择使用 between 操作符构建一个查询条件,而不需要两个单独的限制条件。 当使用 between 操作符时,需要注意下面的事项,即必须首先指定范围的下限(在 between 后面),然后指定范围的上限(在 end 的后卖弄)。

字符串范围

使用日期或数字的范围是易于理解的,但同样可以使用字符串作为搜索范围的条件。使用字符串范围时各字符的次序(在某个字符集内个字符的次序被称为排序顺序)。

成员条件

在一些情况下,不是需要限制表达式为特定值或某个范围的值,而是一个有限值集合。对于这些情况,可以使用 in 操作符。

使用 not in

有时候需要检查一个表达式是否在某个表达式集合中存在,但有时候需要检查的是它是否不存在。对于这些情况,可以使用 not in 操作符。

匹配条件

使用通配符

当根据部分字符串匹配进行搜索时,可能包括: - 以某个字符开始的字符串 - 包含某个子字符串的字符串 - 在字符串的任意位置包括某个字符串的字符串 - 在字符串的任意位置包含某个子字符串的字符串 - 具备特定格式而不关心单个字符的字符串

通配符 匹配
_ 正好 1个字符
% 任意数据的字符(包括 0 )
当使用搜索表达式构建条件是,可以使用 like 操作符。

使用正则表达式

如果带通配符的字符串仍然不能提供足够的灵活性,那么可以使用正则表达式来构造搜索表达式。正则表达式实质上也是一种特殊的搜索表达式。like 操作符中使用正则表达式。

null: 4 个字母的关键字

null 表示值的缺失,适合的场合: - 没有合适的值 - 值未确定 - 值未定义 当使用 null 时,需要记住: - 表达式可以为 null ,但不能等于 null; - 两个 null 值彼此不能判断为相等