🎈写在前面
🙋♂️大家好呀,我是超梦。大家可以叫我小梦~
又到了练习SQL的时候啦!一起来学习吧!
🙋♂️ 小伙伴们如果在学习过程中有不明白的地方,欢迎评论区留言提问,小梦定知无不言,言无不尽。
目录
🌎SQL题目概述
🌎解题思路
🌎方法实现
🌎代码测试
🌎知识点小结
🌎SQL题目概述
LeetCode原题链接
Salary
表:+-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | name | varchar | | sex | ENUM | | salary | int | +-------------+----------+id 是这个表的主键。 sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。 本表包含公司雇员的信息。
🚀题目:
请你编写一个 SQL 查询来交换所有的 'f' 和 'm' (即,将所有 'f' 变为 'm' ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。
注意:你必须仅使用一条 update 语句,且 不能 使用 select 语句。
查询结果如下例所示。
🚩示例 1:
输入: Salary 表: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | m | 2500 | | 2 | B | f | 1500 | | 3 | C | m | 5500 | | 4 | D | f | 500 | +----+------+-----+--------+ 输出: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | f | 2500 | | 2 | B | m | 1500 | | 3 | C | f | 5500 | | 4 | D | m | 500 | +----+------+-----+--------+ 解释: (1, A) 和 (3, C) 从 'm' 变为 'f' 。 (2, B) 和 (4, D) 从 'f' 变为 'm' 。
🌎解题思路
题目中仅使用 单个 update 语句 ,且不产生中间临时表。看似不可能写出来,其实思路很简单。
如果
sex = 'm'
, 那么就把sex设置为f
,否则将sex设置为m
。我们可以通过case...when 流程控制语句实现或者使用if()函数来是现实sex的性别对换。
这样小梦这里就有两种解题思路,如果小伙伴们还有其他解题思路,欢迎评论区留言交流~
🌎方法实现
🌈方法一
update salary set sex = case sex when 'm' then 'f' else 'm' end;
🌈方法二
update salary set sex = if(sex = 'm', 'f', 'm');
🌎代码测试
🌈方法一:
执行代码,开始测试
与测试结果一致,测试成功!
🌈方法二:
执行代码,开始测试
与测试结果一致,测试成功!
🌎知识点小结
🌀case when:
- 简单函数(枚举这个字段所有可能的值)
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
- 搜索函数(搜索函数可以写判断,并且搜索函数只会返回第一个符合条件的值,其他
case
被忽略)CASE WHEN [expr] THEN [result1]…ELSE [default] END
🌀if()函数:
IF函数根据条件的结果为true或false,返回第一个值,或第二个值。
IF(condition, value_if_true, value_if_false)