📜  SQL |条件表达式

📅  最后修改于: 2022-05-13 01:54:21.072000             🧑  作者: Mango

SQL |条件表达式

以下是 SQL 中的条件表达式

  1. CASE 表达式:让您无需调用过程即可使用 IF-THEN-ELSE 语句。
    在一个简单的 CASE 表达式中,SQL 搜索第一个 WHEN……THEN 对,其中 expr 等于 compare_expr 并返回 return_expr。如果不满足上述条件,则存在 ELSE 子句,SQL 返回 else_expr。否则,返回 NULL。
    我们不能为 return_expr 和 else_expr 指定字面量null。所有的表达式(expr、compare_expr、return_expr)必须是相同的数据类型。
    句法:
    CASE expr WHEN comparison_expr1 THEN return_expr1
             [WHEN comparison_expr2 THEN return_expr2
              .
              .
              .
              WHEN comparison_exprn THEN return_exprn
              ELSE else_expr]
    END
    

    例子:

      Input :
      SELECT first_name, department_id, salary,
             CASE department_id WHEN 50 THEN 1.5*salary
                               WHEN 12 THEN 2.0*salary
             ELSE salary
             END "REVISED SALARY"
      FROM Employee;

      输出 :

    解释:在上面的 SQL 语句中,department_id 的值被解码。如果是50,那么工资是1.5倍,如果是12,那么工资是2倍,否则工资没有变化。

  2. DECODE函数:通过执行 CASE 或 IF-THEN-ELSE 语句的工作来促进条件查询。
    DECODE函数以类似于各种语言中使用的 IF-THEN-ELSE 逻辑的方式对表达式进行解码。 DECODE函数在将表达式与每个搜索值进行比较后对其进行解码。如果表达式与搜索相同,则返回结果。
    如果省略默认值,则在搜索值与任何结果值都不匹配时返回空值。
    句法:
    DECODE(col/expression, search1, result1
                            [, search2, result2,........,]
                            [, default])
    
    Input :
    SELECT first_name, department_id, salary,
           DECODE(department_id, 50, 1.5*salary,
                                 12, 2.0*salary,
                  salary)
           "REVISED SALARY"
    FROM Employee;
    

    输出 :

    说明:在上面的 SQL 语句中,测试了 department_id 的值。如果是50,那么工资是1.5倍,如果是12,那么工资是2倍,否则工资没有变化。

  3. COALESCE :返回第一个非空参数。只有当所有参数都为 null 时才返回 Null。当检索数据以进行显示时,它通常用于将默认值替换为空值。
    注意:与 CASE 表达式相同,COALESCE 也不会计算找到的第一个非空参数右侧的参数。
    句法:
    COALESCE(value [, ......] )
    
    Input:
    SELECT COALESCE(last_name, '- NA -')
    from Employee;
    

    输出:

    说明: “-NA-”将显示在姓氏为空的地方,否则将显示相应的姓氏。

  4. GREATEST:从任意数量的表达式列表中返回最大值。比较区分大小写。如果列表中所有表达式的数据类型不相同,则其余所有表达式都转换为第一个表达式的数据类型进行比较,如果不能进行这种转换,则 SQL 将抛出错误。
    注意:如果列表中的任何表达式为 null,则返回 null。
    句法:
    GREATEST(expr1, expr2 [, .....] )
    
    • Input:
      SELECT GREATEST('XYZ', 'xyz')
      from dual;
      
      Output:
      GREATEST('XYZ', 'xyz')
      xyz
      

      说明:小字母的 ASCII 值更大。

    • Input:
      SELECT GREATEST('XYZ', null, 'xyz')
      from dual;
      
      Output:
      GREATEST('XYZ', null, 'xyz')
      -

      说明:由于 null 存在,因此 null 将显示为输出(如上面描述中提到的)。

  5. IFNULL:如果 expr1 不为 NULL,则返回 expr1;否则返回 expr2。返回一个数字或字符串值,具体取决于使用它的上下文。
    句法:
    IFNULL(expr1, expr2)
    
    • Input:
      SELECT IFNULL(1,0) 
      FROM dual;
      
      Output:
      -
      1
      

      解释 :因为,没有表达式为空。

    • Input:
      SELECT IFNULL(NULL,10) 
      FROM dual;
      
      Output:
      --
      10
      

      说明:由于 expr1 为空,因此显示 expr2。

  6. IN:检查一个值是否存在于一组值中,并且可以与 WHERE、CHECK 和视图的创建一起使用。
    注意:与 CASE 和 COALESCE 表达式相同,IN 也不会计算找到的第一个非空参数右侧的参数。
    句法:
    WHERE column IN (x1, x2, x3 [,......] )
    
    Input:
    SELECT * from Employee
    WHERE department_id IN(50, 12);
    

    输出:

    说明: Employees 的所有数据都以部门 ID 50 或 12 显示。

  7. LEAST:从任意数量的表达式列表中返回最小值。比较区分大小写。如果列表中所有表达式的数据类型不相同,则其余所有表达式都转换为第一个表达式的数据类型进行比较,如果不能进行这种转换,则 SQL 将抛出错误。
    注意:如果列表中的任何表达式为 null,则返回 null。

    句法:

    LEAST(expr1, expr2 [, ......])
    
    • strong>Input:
      SELECT LEAST('XYZ', 'xyz')
      from dual;
      
      Output:
      LEAST('XYZ', 'xyz')
      XYZ
      

      说明:大写字母的 ASCII 值较小。

    • Input:
      SELECT LEAST('XYZ', null, 'xyz')
      from dual;
      
      Output:
      LEAST('XYZ', null, 'xyz')
      -
      

      说明:由于 null 存在,因此 null 将显示为输出(如上面描述中提到的)。

  8. NULLIF:如果value1=value2,则返回空值,否则返回value1。
    句法:
    NULLIF(value1, value2)
    

    例子:

    Input:
    SELECT NULLIF(9995463931, contact_num) 
    from Employee;
    

    输出:

说明:对于号码与给定号码匹配的员工,显示 NULL。对于其余的员工 value1 被返回。