给在’宁波’工作的员工,加薪5% 分数 2 作者 浙大城院数据库课程组 单位 浙大城市学院 本题目要求编写SQL语句, 给在’宁波’工作的员工,加薪5%。 表结构: CREATE TABLE `employee` ( `Eid` varchar(10), --职工编号 `EName` varchar(30), --职工姓名 `Wno` varchar(10), --所在仓库 `Salary` int(11) --职工工资 ); CREATE TABLE `warehouse` ( `Wno` varchar(10), --仓库编号 `City` varchar(20), --所在城市 `Size` int(11), --面积 ); 表样例 employee表: Eid EName Wno Salary 0010 张三 A01 3600 0011 刘勇 A01 2700 0012 张立 B01 8500 0021 刘靖 A02 2500 warehouse表: Wno City Size A01 杭州 15000 A02 建德 5000 B01 宁波 1200 B02 奉化 7500 C01 温州 10000 C02 乐清 8000 输出样例: Eid EName Wno Salary 0010 张三 A01 3600 0011 刘勇 A01 2700 0012 张立 B01 8925 0021 刘靖 A02 2500
时间: 2023-07-13 15:34:49 浏览: 439
答案如下:
```
UPDATE employee
SET Salary = Salary * 1.05
WHERE Wno IN (SELECT Wno FROM warehouse WHERE City = '宁波');
```
注:此处使用了子查询,查询 warehouse 表中城市为宁波的仓库编号,然后更新 employee 表中所在仓库编号为这些仓库编号的员工的薪资。
相关问题
设有关系数据库:职 工 关 系 EMPLOYEE (职工号,职工名,街道,城市)工作关系 WORKS(职工号,公司号,工资) 公司关系 COMPANY(公司号, 公司名 , 城市)试用 SQL 语句写 出下列操作 : 将 所 有在“ 银座公司“工作的职工加薪 5 % 。
可以使用如下的 SQL 语句将所有在“银座公司”工作的职工加薪 5%:
```
UPDATE WORKS
SET 工资 = 工资 * 1.05
WHERE 公司号 = (SELECT 公司号 FROM COMPANY WHERE 公司名 = '银座公司');
```
这条 SQL 语句使用了 UPDATE 和 WHERE 语句来更新 WORKS 表中的工资信息,并且只更新那些所在公司为“银座公司”的职工。其中,子查询 `(SELECT 公司号 FROM COMPANY WHERE 公司名 = '银座公司')` 用于获取“银座公司”的公司号,然后将这个公司号作为条件来筛选出需要更新的职工。更新后的工资是原来的 1.05 倍,即加薪了 5%。
在PL/SQL语句中使用游标,给员工加薪,部门10的加10%,部门20加20%,部门30加30% ,其余的加5%,编写PLSQL块, 打印出各部门员工的姓名,部门编号,工资,加薪后的工资;
在PL/SQL中,你可以使用游标(Cursor)遍历员工表,并根据部门编号应用相应的加薪比例。假设我们有一个名为`employees`的表,包含字段`employee_name`, `department_id`, 和 `salary`,下面是一个示例的PL/SQL块来完成这个任务:
```sql
DECLARE
CURSOR emp_cursor IS SELECT employee_name, department_id, salary FROM employees;
emp_rec employees%ROWTYPE; -- 定义一个记录变量
new_salary NUMBER;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_rec; -- 获取一行数据
EXIT WHEN emp_cursor%NOTFOUND; -- 当没有更多数据时退出循环
-- 根据部门ID计算加薪后的工资
CASE emp_rec.department_id
WHEN 10 THEN new_salary := emp_rec.salary * 1.10; -- 加10%
WHEN 20 THEN new_salary := emp_rec.salary * 1.20; -- 加20%
WHEN 30 THEN new_salary := emp_rec.salary * 1.30; -- 加30%
ELSE new_salary := emp_rec.salary * 1.05; -- 其余加5%
END CASE;
DBMS_OUTPUT.PUT_LINE('姓名: ' || emp_rec.employee_name
|| ', 部门: ' || emp_rec.department_id
|| ', 原工资: ' || emp_rec.salary
|| ', 新工资: ' || new_salary);
END LOOP;
CLOSE emp_cursor;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK; -- 如果发生错误,回滚事务
DBMS_OUTPUT.PUT_LINE ('Error: ' || SQLERRM);
END;
/
```
执行此PL/SQL块会打印出每个员工的原始信息及加薪后的工资。
阅读全文