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

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

 选择  IFNULL(NULL,10) FROM dual;

 [IFNULL]
 ---------
    10

 选择  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.0000    1.000

句法

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

无效

句法

 无效 (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