SQL条件表达式

条件表达式摘要表

功能 描述

案例操作员

Return the first non-NULL argument

从任何数量表达式的列表中返回最大值

NULL IF/ELSE construct

检查值是否在一组值中

从任何数量的表达式列表返回最小值

Return NULL if expr1 = expr2

案件

案例表达式有两个关键用途:

  1. 一个更通用的版本,每个条件应该是以true或false评估的布尔表达式,第一个评估为true确定结果。

  2. 或者采用值表达式来确定使用的分支的情况。

语法1

案件 WHEN condition THEN result
    [WHEN ...]
    [ELSE result]
END

语法2

案件 valueExpression WHEN value1 THEN result1
    [WHEN ...]
    [ELSE result]
END

描述

案件 clauses can be used wherever an expression is valid. condition is an expression that returns a boolean result.

如果结果是:

  • True, then the value of the 案件 expression is the result that follows the condition.

  • False, any subsequent WHEN clauses are searched in the same manner.

If no WHEN condition is true then the value of the case expression is the result in the ELSE clause.

If the ELSE clause is omitted and no condition matches, the result is NULL.

Nuodb为案例表达式的所有分支执行相同类型,精度和比例。在分支没有相同类型的情况下,所有分支被强制到计算的通用类型。在常量折叠期间强制强制执行胁迫,这意味着当施加案例胁迫时,即使失败的分支也不是结果的一部分,查询也可能失败。

对于归属的归属版本,在当子句中的每个谓词是单独检查的类型,并且在比较运算符模型后应用胁迫。使用案例表达式的简化版本,搜索条件的类型和子句的类型必须适应公共类型。

例子

CREATE TABLE tst_table (P int);
 在 TO tst_table VALUES (1),(2),(NULL),(20);
选择 案件 WHEN P = 1 THEN 'one'
  WHEN P is null THEN 'null'
  WHEN P > 10 THEN 'big'
  ELSE 'unknown' END
  from tst_table;

 -------
 one
 unknown
 null
 big

选择 案件 P
  WHEN 1 THEN 'one'
  WHEN 2 THEN 'two'
  ELSE 'big' END
  from tst_table;

 ---
 one
 two
 big
 big

合并

句法

合并(value [, ...])

描述

返回其不是null的参数中的第一个参数。只有当所有参数都为null时,才会返回null。当检索到显示数据时,它通常用于替换空值的默认值。

Like a 案件 expression, 合并 will not evaluate arguments that are not needed to determine the result (that is, arguments to the right of the first non-null argument are not evaluated).

例子

CREATE TABLE t (a int, b int, c int);
 在 TO t VALUES (1, 2, 3), (null, 4, 5), (null, null, 6), (null, null, null);
选择 合并(a, b, c, 7) FROM t;

 COALESCE
 ---------
     1
     4
     6
     7

最伟大的

句法

最伟大的(expr1, expr2 [, ...] )

描述

从两个或多个表达式的列表中返回最大值。

如果表达式列表并非所有数据类型都不相同,则列表中的表达式将转换为基于参数的类型计算的公共类型。如果不存在通用类型,或者不是所有表达式可转换为通用类型,则返回错误。

Returns NULL if any expression in the list is NULL.

例子

选择 GREATEST('abc', 'ABC') FROM DUAL;

 greatest
 ---------
    abc

选择 GREATEST('abc', 'ABC', NULL) FROM DUAL;

 greatest
 ---------
  <null>


/* Count teams that have more LOSSES than WINS or TIES */
选择 COUNT(*) FROM hockey.teams
  WHERE GREATEST(wins, losses, ties) = losses;

 COUNT
 ------
  685

选择 GREATEST(1,2,'abc') FROM DUAL;
Error 22000: unable to convert string "abc" into type "number"

ifnull.

句法

ifnull.(expr1,expr2)

描述

If expr1 is not NULL, ifnull.() returns expr1; otherwise it returns expr2. The returned type of ifnull. is the common type of the two arguments. Both arguments must be coercible to the common type.

例子

选择 IFNULL(1,0) FROM dual;

 IFNULL
 -------
    1

SQL> 选择 IFNULL(NULL,10) FROM dual;

 IFNULL
 -------
   10

SQL> 选择 1.0000/10.0000, IFNULL(1.000/null,1.000/10.0000), IFNULL(1.000/null,10.0000), IFNULL(null/10.000,1.000) FROM dual;

                IFNULL     IFNULL    IFNULL
 ------------ ----------- --------- --------
 .10000000000 .1000000000 10.000000 1.000000

句法

WHERE column IN (x1,x2,x3 [,...] )

这相当于:

WHERE ( column=x1 OR column=x2 OR column=x3 [OR ... ] )

描述

Checks if the specified column data is a member of the specified list. It can be used with WHERE, CHECK, and creation of views.

在操作员中,在两个步骤中应用比较公共类型算法,首先在列表中的元素上,然后通过计算搜索参数和中列表的公共类型之间的公共类型。通过计算当前计算的公共类型和下一个参数之间的公共类型,从左到右计算右侧参数列表中的常用类型。这使得在参数的类型方面不换向。

例子

选择 * FROM hockey WHERE position  ('Fan','Goalie');

 ID  NUMBER       NAME      POSITION   TEAM
 --- ------- -------------- --------- ------
 22    35    ANTON KHUDOBIN  Goalie   Bruins
 23    40    TUUKKA RASK     Goalie   Bruins
 24     1    MAX SUMMIT      Fan      Bruins

至少

句法

至少(expr1, expr2 [, ...])

描述

从两个或多个表达式的列表中返回最小值。

如果表达式列表不是相同的数据类型,则Nuodb将与最大表达式的相同类型规则应用于相同的类型规则。

Returns NULL if any expression in the list is NULL.

例子

选择 LEAST('abc', 'ABC') FROM DUAL;

  least
 ------
  ABC

选择 LEAST('abc', 'ABC', NULL) FROM DUAL;

  least
 ------
  <null>

/* Count teams that have more LOSSES and TIES than WINS */
 选择 COUNT(*) FROM hockey.teams
  WHERE LEAST(wins, losses, ties) = wins;

 COUNT
 ------
   20

选择 LEAST(1,2,'abc') FROM DUAL;
Error 22000: unable to convert string "abc" into type "number"

无效

句法

无效(value1, value2)

描述

Returns a null value if value1 and value2 are equal; otherwise it returns value1. An error is returned if value1 and value2 do not have the same type and cannot be coerced to a common type.

例子

CREATE TABLE t (a int, b int);
 在 TO t VALUES (null, null), (null, 1), (1, null), (1, 1);
选择 a, b, nullif (a, b) as nullif FROM t;

   A      B    NULLIF
 ------ ------ -------
 <null> <null> <null>
 <null>      1 <null>
      1 <null>      1
      1      1 <null>

选择 合并 (a, 0) as a, 合并 (b, 0) as b, 合并 (nullif (a, b), 0) AS nullif FROM t;

 A  B  NULLIF
 -- -- -------
 0  0     0
 0  1     0
 1  0     1
 1  1     0