比较函数和运算符

比较运算符

运算符说明
<小于
>大于
<=小于等于
>=大于等于
=等于
<>不等于
!=不等于(该语法不标准,但很常见)

范围运算符:BETWEEN

BETWEEN 运算符测试某个值是否处于指定的范围之内。其语法为 value BETWEEN min AND max

  1. SELECT 3 BETWEEN 2 AND 6;

上面显示的语句等效于以下语句:

  1. SELECT 3 >= 2 AND 3 <= 6;

要测试某个值是否未处于指定的范围之内,应使用 NOT BETWEEN

  1. SELECT 3 NOT BETWEEN 2 AND 6;

上面显示的语句等效于以下语句:

  1. SELECT 3 < 2 OR 3 > 6;

使用向上面等效的表达式应用的标准 NULL 计算规则对 BETWEENNOT BETWEEN 语句中的 NULL 进行计算:

  1. SELECT NULL BETWEEN 2 AND 4; -- null
  2. SELECT 2 BETWEEN NULL AND 6; -- null
  3. SELECT 2 BETWEEN 1 AND NULL; -- false
  4. SELECT 8 BETWEEN NULL AND 6; -- false

BETWEENNOT BETWEEN 运算符也可用于计算任何可排序的类型。例如 VARCHAR 类型:

  1. SELECT 'Paul' BETWEEN 'John' AND 'Ringo'; -- true

请注意,BETWEENNOT BETWEEN 的 value、min 和 max 参数必须具有相同的类型。例如,如果您向 openLooKeng 询问 John 是否处于 2.3 和 35.2 之间,它会产生一个错误。

IS NULL 和 IS NOT NULL

IS NULLIS NOT NULL 运算符测试某个值是否为 NULL(未定义)。这两个运算符都对所有数据类型起作用。

如果对 IS NULL 使用 NULL,则计算结果为 true:

  1. select NULL IS NULL; -- true

但使用其他任何常量的计算结果都不是 true:

  1. SELECT 3.0 IS NULL; -- false

IS DISTINCT FROM 和 IS NOT DISTINCT FROM

在 SQL 中,NULL 值表示一个未知的值,所以任何涉及 NULL 的比较都会生成 NULLIS DISTINCT FROMIS NOT DISTINCT FROM 运算符将 NULL 视为一个已知的值,并且都保证即使在存在 NULL 输入的情况下结果也为 true 或 false:

  1. SELECT NULL IS DISTINCT FROM NULL; -- false
  2. SELECT NULL IS NOT DISTINCT FROM NULL; -- true

在上面的示例中,NULL 值被视为与 NULL 相同。在比较可能包含 NULL 的值时,使用这些运算符来保证结果为 TRUEFALSE

下面的真值表展示了如何处理 IS DISTINCT FROMIS NOT DISTINCT FROM 中的 NULL

aba = ba <> ba DISTINCT ba NOT DISTINCT b
11TRUEFALSEFALSETRUE
12FALSETRUETRUEFALSE
1NULLNULLNULLTRUEFALSE
NULLNULLNULLNULLFALSETRUE

GREATEST 和 LEAST

这两个函数不是 SQL 标准中的函数,而是常见的扩展函数。与 openLooKeng 中的大多数其他函数一样,如果任一参数为 NULL,这两个函数会返回 NULL。请注意,在其他一些数据库(如 PostgreSQL)中,只有当所有参数都是 NULL 时它们才返回 NULL。

支持以下类型:DOUBLEBIGINTVARCHARTIMESTAMPTIMESTAMP WITH TIME ZONEDATE

greatest(value1, value2, …, valueN) -> [与输入相同]

返回所提供的值中的最大值。

least(value1, value2, …, valueN) -> [与输入相同]

返回所提供的值中的最小值。

量化比较谓词:ALL、ANY 和 SOME

可以按照以下方法将 ALLANYSOME 量词与比较运算符配合使用:

  1. expression operator quantifier ( subquery )

例如:

  1. SELECT 'hello' = ANY (VALUES 'hello', 'world'); -- true
  2. SELECT 21 < ALL (VALUES 19, 20, 21); -- false
  3. SELECT 42 >= SOME (SELECT 41 UNION ALL SELECT 42 UNION ALL SELECT 43); -- true

以下是一些量词和比较运算符组合的含义:

表达式含义
A = ALL (…)A 等于所有值时计算结果为 true
A <> ALL (…)A 不匹配任何值时计算结果为 true
A < ALL (…)A 小于最小值时计算结果为 true
A = ANY (…)A 等于任一值时计算结果为 true。该形式等效于 A IN (…)
A <> ANY (…)A 不匹配一个或多个值时计算结果为 true
A < ANY (…)A 小于最大值时计算结果为 true