过滤
条件评估
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 值彼此不能判断为相等