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
需求: 当user_name为null时 给user_name赋值李四
第一种结果
SELECT CASE user_name WHEN NULL THEN '李四' ELSE user_name END AS userName FROM USER;
第二种结果
SELECT CASE WHEN user_name IS NULL THEN '李四' ELSE user_name END AS userName FROM USER;
注: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
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 条件)