|
2012-4-14 答案ABE, 详见OO的分析。
==============================================================================
2012-4-21: UPDATE 语句
作者: Lucas Jellema
难度:中
我的数据库中有如下的表:
create table amis_emp
( empno number not null primary key
, ename varchar2(10)
, sal number(7,2)
, deptno number(3) not null
)
/
create table amis_dept
( deptno number(3) not null primary key
, dname varchar2(10)
, loc varchar2(20) not null
)
/
alter table amis_emp
add constraint amis_emp_dept_fk foreign key (deptno) references amis_dept (deptno)
/
表里有如下数据:
insert into amis_dept values (10, 'ACCOUNTING', 'NEW YORK');
insert into amis_dept values (20, 'RESEARCH', 'DALLAS');
insert into amis_dept values (30, 'SALES', 'CHICAGO');
insert into amis_dept values (40, 'OPERATIONS', 'BOSTON');
insert into amis_dept values (50, 'TRAINING', 'BOSTON');
insert into amis_dept values (60, 'MARKETING', 'NEW YORK');
insert into amis_dept values (70, 'FINANCE', 'CHICAGO');
insert into amis_dept values (80, 'HRM', 'DALLAS');
insert into amis_dept values (90, 'LOGISTICS', 'BOSTON');
insert into amis_emp (empno, ename, sal, deptno) values (10, 'BAREL', 2500, 20);
insert into amis_emp (empno, ename, sal, deptno) values (20, 'NUIJTEN', 4300, 10);
insert into amis_emp (empno, ename, sal, deptno) values (30, 'JELLEMA', 3800, 20);
insert into amis_emp (empno, ename, sal, deptno) values (40, 'JANSEN', 900, 10);
insert into amis_emp (empno, ename, sal, deptno) values (50, 'SCHEFFER', 6500, 30);
insert into amis_emp (empno, ename, sal, deptno) values (60, 'VAN ROSSUM', 2100, 10);
insert into amis_emp (empno, ename, sal, deptno) values (70, 'VINK', 3000, 20);
insert into amis_emp (empno, ename, sal, deptno) values (80, 'DE ROOIJ', 2780, 30);
insert into amis_emp (empno, ename, sal, deptno) values (90, 'MICHELS', 3340, 40);
commit
/
哪些语句能够把所有位于DALLAS的部门的员工的薪水提升10%?
(A)
update (select sal
from amis_emp join amis_dept using (deptno)
where loc = 'DALLAS'
)
set sal = sal * 1.1
(B)
with dallas_employees
( select sal
from amis_emp
where deptno in ( select deptno
from amis_dept
where loc = 'DALLAS'
)
)
update dallas_employees
set sal = sal * 1.1
(C)
merge into amis_emp t
using ( select sal*1.1 as sal
, empno
from amis_emp
join
amis_dept
using (deptno)
where loc = 'DALLAS'
) updated_emps
on (t.empno = updated_emps.empno)
when matched
then update set t.sal = updated_emps.sal
(D)
update amis_emp
set sal = sal * 1.1
where deptno = ( select deptno
from amis_dept
where loc = 'DALLAS'
)
(E)
update amis_emp e
set sal = sal * ( select case loc
when 'DALLAS' then 1.1
else 1
end
from amis_dept d
where d.deptno = e.deptno
)
|
|