首页 > 试题广场 >

将所有获取奖金的员工当前的薪水增加10%

[编程题]将所有获取奖金的员工当前的薪水增加10%
  • 热度指数:115371 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
现有员工获取到的奖金简表emp_bonus如下:
  • emp_no指获取到奖金的员工编号;
  • bytpe指获取到的奖金类型。
emp_no btype
10001 1

有员工薪资简表salaries如下:
  • emp_no指员工编号;
  • salary指薪资;
  • from_date指该薪资的开始日期;
  • to_date指该薪资的结束日期。
emp_no
salary from_date to_date
10001
10001
85097.0
88958.0
2001-06-22
2002-06-22
2002-06-22
9999-01-01

请你写出更新语句,将所有获取奖金的员工当前的(salaries.to_date='9999-01-01')薪水增加10%。(emp_bonus里面的emp_no都是当前获奖的所有员工,不考虑获取的奖金的类型)。
以上示例更新后的结果salaries为:
emp_no
salary from_date to_date
10001
10001
85097.0
97853.8
2001-06-22
2002-06-22
2002-06-22
9999-01-01
注:只需写出更新语句,后台会执行以下SQL语句,将更新后的结果与预期结果对比:
select * from salaries;

示例1

输入

drop table if exists  emp_bonus; 
drop table if exists  `salaries` ; 
create table emp_bonus(
emp_no int not null,
btype smallint not null);
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary`  float(11,1) default NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
insert into emp_bonus values(10001,1);
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');

输出

10001|85097.000|2001-06-22|2002-06-22
10001|97853.800|2002-06-22|9999-01-01
头像 青杨风2199
发表于 2021-01-03 10:57:11
方法1:连接查询(先join两张表) update salaries as s join emp_bonus as e on s.emp_no=e.emp_no set salary=salary*1.1 where to_date='9999-01-01'方法2:子查询(两次select) upd 展开全文
头像 高质量搬砖人
发表于 2021-01-31 10:04:42
方法)更改表 UPDATE salaries AS s SET s.salary = 1.1 * s.salary WHERE s.to_date = '9999-01-01' AND& 展开全文
头像 此用户名涉嫌违规
发表于 2021-03-18 11:04:25
题目描述:更新语句,将所有获取奖金的员工当前的(salaries.to_date='9999-01-01')薪水增加10%。个人思路:没什么好讲的,按照题意先select出获奖员工的emp_no,然后对这些现在还在职的员工(to_date="9999-01-01“)的薪资进行更新。代码: updat 展开全文
头像 Ding_123
发表于 2021-12-03 13:55:51
知识点 更新数据标准格式如下 update 表名 set 字段1 = 值1, 字段2 = 值2, ... where 筛选条件 筛选条件为to_date="9999-01-01"以及emp_no为获得奖金的员工使用in 代码 update salaries set 展开全文
头像 Java编程白哥
发表于 2023-03-14 09:04:51
方法一:思路:使用update更新表工资,限定条件为当前和emp_bonus表中所有的员工(使用in谓词解决)代码: update salaries set salary = salary * 1.1 where to_date = '9999-01-01' and emp_no in (selec 展开全文
头像 牛客220655246号
发表于 2021-10-21 16:10:06
UPDATE salaries set salary = salary * 1.1 where to_date = '9999-01-01' and emp_no in (select emp_no from emp_bonus)
头像 不穿胖次的羊
发表于 2023-03-15 09:11:30
使用连接查询,子查询执行时需要创建临时表,查询完毕再删除临时表,相比连接查询多了一个创建和销毁临时表的阶段update salaries as s join emp_bonus using(emp_no)set salary=salary*1.1where to_date='9999-01-01'
头像 jiang_dr
发表于 2021-10-25 10:45:02
思路: 连接两个表,然后条件判断当前员工。 最后使用 UPDATE ... SET ... WHERE ... IN ... 来实现更改数据 但是这里需要注意的是 条件判断需要放到外层的 WHERE 语句中,否则查询出来的 emp_no 虽然可能只有一个,但在本题中一个emp_no对应多行(应 展开全文
头像 DAMES
发表于 2022-10-11 10:02:58
update salaries set salary = salary*1.1 where to_date='9999-01-01' and emp_no in (select emp_no from emp_bonus) 本题考查update语法,用于数据更新,语法为: u 展开全文
头像 lisaisdan
发表于 2022-01-24 05:59:47
update salaries set salary = salary * 1.1 where to_date ="9999-01-01" and emp_no in (select emp_no from emp_bonus); select * from salaries