SQL中If,Case的区别与使用

IF函数(类似于三元表达式的效果):

IF(expr,expr_true,expr_false)

当expr为true时,if函数返回expr_true的值;否则返回expr_false的值

eg:

SELECT
	*,
IF
	( stu_sex='男', "1", "0" ) AS sex 
FROM
	stu

在结果集中,stu_sex为男的sex都为1,其余情况为0

IFNULL(expr1,expr2)

当expr1的值不为null时,函数返回expr1;否则返回expr2

SELECT IFNULL(null,"is null")   	-->is null
SELECT IFNULL("not null","expr2")   -->not null

case:用于判断分支

语法:
Case […]
When … then … [When … then …]
[else …]
end

eg:

  1. 在成绩表中按不通过分数段统计人数
统计课程1下,不同分数段的学生人数:
SELECT
	count(case when score<30 then 1 end) as '<30',#then 1 表示该行返回1,则count计数器加1
	count(case when score>29 and score<50 then 1 end) as '29<score<50',
	count(case when score>49 then 1 end ) as '50<'
FROM
	scores
	WHERE course_id=1
  1. case在行中对数据的处理用例
SELECT *
,case 
	when score<30  then '<30' 
	when score>29 and score<50 then "<50" 
	else '>49'
	end as score_area #显示每行不同分值的人所属的分段
,case course_id 
	when 1 then '1_name'
	when 2 then '2_name'
	else '?_name'
	end as course_name #更具课程id转换每行的课程名
FROM scores
### SQLCASE WHENIF语句区别 SQL中的`CASE WHEN``IF`语句虽然都可以用于条件判断,但它们的使用场景、语法结构以及功能范围存在显著差异。以下是两者的具体区别: #### 1. 使用场景 - **CASE WHEN**: `CASE WHEN`是一个标准的SQL语句,适用于所有支持SQL标准的数据库系统。它主要用于在查询中根据条件动态生成列值或进行复杂的条件分支处理[^2]。 它可以嵌套使用,并且支持两种形式:简单CASE(基于相等性判断)搜索CASE(基于任意条件表达式)。 - **IF**: `IF`语句通常出现在特定数据库系统的扩展功能中,例如MySQL中的`IF()`函数。它是作为函数存在的,而不是一个完整的SQL语句[^3]。 在某些情况下,`IF`可以用作简单的三元运算符替代品,但它的功能较为有限,无法实现复杂的多分支逻辑。 #### 2. 语法结构 - **CASE WHEN**: `CASE WHEN`语句的语法更加灵活,支持多条件判断嵌套逻辑。其基本形式如下: ```sql CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ELSE 默认结果 END ``` 这种结构允许对多个条件进行逐一检查,并返回第一个满足条件的结果[^1]。 - **IF**: 在MySQL中,`IF`作为一个函数使用,其语法为: ```sql IF(条件, 真值, 假值) ``` 它只能处理单一条件,并返回两个可能的结果之一。这种限制使得`IF`不适合复杂的多分支逻辑[^3]。 #### 3. 功能范围 - **CASE WHEN**: `CASE WHEN`不仅可以用于`SELECT`语句中生成动态列值,还可以在`ORDER BY`、`WHERE`等子句中使用[^4]。此外,它支持复杂的布尔表达式嵌套逻辑,能够处理更广泛的场景。 - **IF**: `IF`函数的功能相对单一,仅限于简单的条件判断。它不能直接嵌套到其他SQL子句中,也无法处理复杂的多条件分支[^3]。 #### 4. 性能对比 - **CASE WHEN**: 由于`CASE WHEN`需要逐一检查每个条件,因此在处理大量复杂条件时可能会稍微影响性能。然而,现代数据库优化器通常能够很好地处理这种情况。 - **IF**: `IF`函数的执行效率较高,因为它只涉及单一条件的判断。但在实际应用中,性能差异通常可以忽略不计,除非是在极端情况下[^4]。 #### 示例代码 以下是一个使用`CASE WHEN``IF`的对比示例: ```sql -- 使用CASE WHEN SELECT column1, CASE WHEN column2 > 10 THEN '大于10' WHEN column2 = 10 THEN '等于10' ELSE '小于10' END AS result FROM table_name; -- 使用IF SELECT column1, IF(column2 > 10, '大于10', IF(column2 = 10, '等于10', '小于10')) AS result FROM table_name; ``` 尽管两者可以实现类似的功能,但`CASE WHEN`的可读性灵活性明显更高[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值