1,case函数 (用于分类统计)

第一种:简单的case函数

case sex
  when '1条件' then '男(1结果)'
  when '2条件' then '女(2结果)’
  else '其他' 

end

第二种:case搜索函数

case when sex = '1条件' then '男(1结果)'
     when sex = '2条件' then '女(2结果)'
     else '其他' 
end

这两种方式,可以实现相同的功能。

简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。

当处理null字段是要用第二种方法,第一种方法查询的结果是错的。

 

例如 有一张user表 含有两个字段user_id和 user_name

SQL常用语句3——case函数,null函数,decode函数,exsits_赋值

 

需求: 当user_name为null时 给user_name赋值李四

第一种结果

SELECT
 CASE user_name 
   WHEN NULL THEN '李四' 
   ELSE user_name 
 END AS userName 
FROM 
  USER;

  SQL常用语句3——case函数,null函数,decode函数,exsits_oracle_02

 

 

 第二种结果

 

SELECT
 CASE
   WHEN user_name IS NULL THEN '李四' 
   ELSE user_name 
 END AS userName 
FROM
  USER;

  SQL常用语句3——case函数,null函数,decode函数,exsits_赋值_03

 

 

  注:Case函数只返回第一个符合条件的值,剩下的Case部分将不会执行。

 

2,null函数  (让null值返回0,利于计算)

语法
ISNULL ( check_expression , replacement_value )

参数
check_expression    将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。

replacement_value   在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。

P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23  
3 Gorgonzola 15.67 9 20

SQL Server / MS Access

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products

Oracle

Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:

 

SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))

FROM Products

MySQL

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM
Products

或者

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

 

3.decode函数 将查询结果翻译成其他值(以其他形式表现出来)

select decode(条件,值1,返回值1,值2,返回值2,....值n,返回值n,缺省值)

【注意】:decode 函数 ,只能在select 语句用。

缺省值:默认选项  --在此缺省值可以省略

 

4.exsits

exsits  判断查询子句中是否有记录,如果有一条或者几条记录则返回true,否则返回false

select 列名1,列名2....

from 表名

where exists(select 列名 from 表名 where 条件)