数据库每日一题---第5天:变更性别
一、问题描述
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 语句。
题目链接:变更性别
二、题目要求
样例
输入:
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) sex 从 'm' 变为 'f' 。
(2, B) 和 (4, D) sex 从 'f' 变为 'm' 。
考察
1.IF判断、CASE语句
2.建议用时10~25min
三、问题分析
1. IF判断
我们可以直接使用if(sex='m','f','m') 三元表达式,就是说如果sex等于m,那么返回f,否则返回m
对于if判断返回的结果直接用,update 中的set更新一下对应的性别符号就可以了。
2. CASE语句
对于这一题我们还可以选择
case ...
when ... then...
when ... then...
end
这样的case语句进行判断,我们只需要当性别sex等于m对应f字符,性别sex等于f对应m字符,最后加上一个结束符号end就可以了。
四、编码实现
1. IF判断
select c.Name as 'Customers'
from Customers as c
where c.Id not in( select CustomerId from Orders)
2. CASE
update Salary
set sex=
(case sex when 'm' then 'f' when 'f' then 'm' end)
五、测试结果



转载自:https://juejin.cn/post/7104621639215611934