mysql之if和when函数

这篇博客介绍了SQL中用于逻辑判断的IF和WHEN表达式,展示了如何根据条件对数据进行分类和转换。通过实例解释了如何使用IF进行三层嵌套逻辑判断以及WHEN表达式的两种用法,包括条件判断和列值匹配。同时,给出了将性别字段转换为'男'、'女'或'其他'的示例。这些表达式在数据处理和分析中非常实用。
IF表达式
  1. IF(expr1,expr2,expr3)

如果 expr1 是TRUE ,则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。if语句还可以相互嵌套,如下

  1. IF(IF(expr1,expr2,expr3),expr2,expr3)

可以多层嵌套使用,多个判断语句

题目

使用if解决:

SELECT 
    device_id, gender, 
    IF(age IS NULL , '其他',
      IF(age < 20, '20岁以下',
        IF(age BETWEEN 20 AND 24, '20-24岁', '25岁及以上'))) AS age_cut // 三层嵌套
FROM
    user_profile;
WHEN表达式
  1. 用法一
CASE 
    WHEN 条件判断 THEN 结果
    ......
    WHEN 条件判断 THEN 结果
    ELSE 其他结果
END 

ELSE就是java当中的default

上面那个图使用when解法

SELECT 
    device_id, gender, 
CASE 
    WHEN age < 20 THEN '20岁以下'
    WHEN age < 25 THEN '20-24岁'
    WHEN age >= 25 THEN '25岁及以上'
    ELSE '其他'
END 
AS age_cut
FROM
    user_profile;
  1. 方法二
CASE 列值
    WHEN1 THEN 结果1
    ......
    WHEN2 THEN 结果2
    ELSE 其他结果
END 

举例
把性别改成男/女

SELECT 
CASE gender
  WHEN 'male' THEN '男'
  WHEN 'female' THEN '女'
  ELSE '其他'
END AS gender
FROM 
user_profile;
if和when联合使用

when的第一种用法和if可以联合使用

WHEN 条件判断 THEN 结果 ,其中条件判断可以改为if

参考
MySQL if 语句用法
mysql中的when的用法_MySQL数据库之Mysql casewhen的三种用法

<think> 我们正在讨论MySQLIF函数。根据引用[1][2],IF函数的基本用法是:IF(expr1, expr2, expr3)。如果expr1为真(非零且非NULL),则返回expr2,否则返回expr3。 引用[2]给出了一个示例:在查询学生表时,将sex字段的0转换为'女',非0转换为'男'。 现在,我将为用户整理一份关于MySQL IF函数的详细指南,包括语法、使用场景、示例以及注意事项。同时,我会生成一些相关问题。 注意:用户要求使用中文回答,并且在适当的地方添加引用标记。另外,由于之前的问题是关于substring_index的,但当前问题已经转向IF函数,因此我将专注于IF函数的内容。 结构: 1. IF函数的基本语法 2. 使用示例(包括简单示例复杂示例) 3. 使用场景 4. 注意事项 5. 与CASE语句的简单比较 6. 相关问题 注意:在示例中,我会使用一些简单的表格数据来演示。 </think> ### MySQL `IF()` 函数使用指南及示例 #### 一、基本语法 ```sql IF(expr1, expr2, expr3) ``` - **执行逻辑**: - 当条件表达式 `expr1` 为 **真(非0且非NULL)** 时返回 `expr2` - 当 `expr1` 为 **假(0或NULL)** 时返回 `expr3` - **等价形式**:类似编程语言的三目运算符 `expr1 ? expr2 : expr3` #### 二、使用示例 1. **基础逻辑判断** ```sql SELECT product_name, IF(stock > 0, '可售卖', '缺货') AS status FROM products; ``` | product_name | status | |--------------|--------| | 手机 | 可售卖| | 耳机 | 缺货 | 2. **数值转换**(如引用[2]示例) ```sql SELECT name, IF(sex=0, '女', '男') AS gender FROM students; ``` | name | gender | |-------|--------| | name1 | 女 | | name3 | 男 | 3. **嵌套复杂逻辑** ```sql SELECT order_id, IF( payment_status=1 AND ship_status=2, '已完成', IF(payment_status=0, '待支付', '配送中') ) AS order_state FROM orders; ``` #### 三、进阶用法 1. **结合聚合函数** ```sql SELECT COUNT(IF(score >= 60, 1, NULL)) AS pass_count, AVG(IF(department='IT', salary, NULL)) AS it_avg_salary FROM employees; ``` 2. **在UPDATE语句中使用** ```sql UPDATE users SET vip_level = IF(purchase_total > 1000, 2, 1); ``` 3. **与数学运算结合** ```sql SELECT product_id, price * IF(is_discount=1, 0.8, 1) AS final_price FROM products; ``` #### 四、注意事项 1. **NULL值处理**: ```sql SELECT IF(NULL, 'A', 'B'); -- 返回'B'(NULL视为假) ``` 2. **类型转换规则**: | 表达式组合 | 返回类型 | |------------------------|----------------| | `IF(1, 123, 'abc')` | 字符串类型 | | `IF(0, 10.5, 20)` | 小数类型(20.0)| 3. **性能建议**: - 在WHERE条件中避免嵌套多层IF(影响索引使用) - 复杂逻辑优先考虑`CASE WHEN`(可读性更佳) > 提示:`IF()` 最适合简单二元判断,超过两个分支时建议使用 `CASE WHEN`[^1][^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值