SQL |条件表达式
以下是 SQL 中的条件表达式
- 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倍,否则工资没有变化。
- 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倍,否则工资没有变化。 - COALESCE :返回第一个非空参数。只有当所有参数都为 null 时才返回 Null。当检索数据以进行显示时,它通常用于将默认值替换为空值。
注意:与 CASE 表达式相同,COALESCE 也不会计算找到的第一个非空参数右侧的参数。
句法:COALESCE(value [, ......] )
Input: SELECT COALESCE(last_name, '- NA -') from Employee;
输出:
说明: “-NA-”将显示在姓氏为空的地方,否则将显示相应的姓氏。 - 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 将显示为输出(如上面描述中提到的)。
- 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。
- 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 显示。
- 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 将显示为输出(如上面描述中提到的)。
- NULLIF:如果value1=value2,则返回空值,否则返回value1。
句法:NULLIF(value1, value2)
例子:
Input: SELECT NULLIF(9995463931, contact_num) from Employee;
输出:
说明:对于号码与给定号码匹配的员工,显示 NULL。对于其余的员工 value1 被返回。