力扣刷题学习SQL篇——1-5 修改(变更性别——使用判断if/case when)

本文介绍如何使用SQL更新语句,特别是IF或CASE WHEN函数,来在不创建临时表的情况下交换Salary表中'f'和'm'的性别值。提供了一种使用ASCII码转换的特殊解法,并给出了相关SQL UPDATE语句的复习链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

力扣刷题学习SQL篇——1-5 修改(变更性别——使用判断if/case when)

1、题目

题目链接:https://leetcode.cn/problems/swap-salary/
SQL架构

Create table If Not Exists Salary (id int, name varchar(100), sex char(1), salary int)
Truncate table Salary
insert into Salary (id, name, sex, salary) values ('1', 'A', 'm', '2500')
insert into Salary (id, name, sex, salary) values ('2', 'B', 'f', '1500')
insert into Salary (id, name, sex, salary) values ('3', 'C', 'm', '5500')
insert into Salary (id, name, sex, salary) values ('4', 'D', 'f', '500')

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' 。

2、自己的解法

利用if流控制函数来解决这个问题,当然也可以用其他判断

update Salary set sex = if( sex = 'm', 'f', 'm')

3、特殊的解法

使用ASCII转码在转回来,这个ASCII方法在这里,可以看看
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html

update Salary set sex = char(ascii('m')+ascii('f') - ascii(sex))

4、一些拓展

这篇文章建议结合上一篇来看,主要知识点都写在上一篇了。
https://blog.youkuaiyun.com/weixin_43987277/article/details/126320453
如果你不记得如何修改语句的,就看这里吧
SQL UPDATE 语句
https://www.runoob.com/sql/sql-update.html

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
Case When语句可以用来根据给定的条件来判断性别使用Case When语句时,我们可以在When后面写上条件,然后在Then后面写上对应的结果。比如,如果我们想把性别1的记录标记为“男性”,性别为2的记录标记为“女性”,那么我们可以使用以下的Case When语句: ```sql Case When sex = 1 Then '男性' When sex = 2 Then '女性' End ``` 这段代码将根据不同的性别值返回相应的结果。注意,如果没有匹配到任何条件,那么Case When语句将返回Null。此外,如果我们想要处理一个范围的条件,可以使用Between关键字,比如: ```sql Case When age Between 18 and 30 Then '青年' When age Between 31 and 50 Then '中年' Else '其他' End ``` 这段代码将根据年龄的范围返回相应的结果。需要注意的是,每个条件都是按照顺序依次判断的,如果一个条件满足,那么后面的条件不会再被判断。另外,我们还可以在Case When语句的末尾添加一个Else子句,用于处理所有未被匹配到的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [case when](https://blog.youkuaiyun.com/weixin_39864101/article/details/111852552)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [力扣学习SQL——1-5 修改变更性别——使用判断if/case when)](https://blog.youkuaiyun.com/weixin_43987277/article/details/126320938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值