likes
comments
collection
share

数据库每日一题---第5天:变更性别

作者站长头像
站长
· 阅读数 31

一、问题描述

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)

五、测试结果

数据库每日一题---第5天:变更性别

数据库每日一题---第5天:变更性别

数据库每日一题---第5天:变更性别

转载自:https://juejin.cn/post/7104621639215611934
评论
请登录