Oracle初级测试题十一(19/19)--数据操作与事务控制

练习1

  1. 向部门表新增一个部门,部门编号为50,部门名称为HR,工作地点为SY。
insert into dept(deptno,dname,loc)
       values(50,'HR','SY');
  1. 向部门表新增一个部门,部门编号为60,部门名称为MARKET。
insert into dept(deptno,dname)
       values(60,'MARKET');

练习2

  1. 向员工表中新增一个员工,员工编号为8888,姓名为BOB,岗位为CLERK,经理为号7788,入职日期为1985-03-03,薪资3000,奖金和部门为空。
insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
            values(8888,'BOB','CLERK',7788
            ,to_date('1985-03-03','yyyy/mm/dd'),3000,null,null);

练习3

  1. 使用CREATE TABLE emp_back as SELECT * FROM EMP WHERE 1=0,创建emp_back表,拷贝下来即可。
create table emp_back
as select * from emp where 1 = 0;
  1. 把emp表中入职日期大于1982年1月1日之前的员工信息复制到emp_back表中。
insert into emp_back
            select * 
            from emp
            where hiredate > '01-1月-82';

练习4

  1. 修改部门20的员工信息,把82年之后入职的员工入职日期向后调整10天
select * from emp_back;

update emp_back
set hiredate = hiredate + 10
where deptno in 20
and hiredate > '01-1月-82';

select * from emp_back;
  1. 修改奖金为null的员工,奖金设置为0
select * from emp_back;

update emp_back
set comm = 0
where comm is null;

select * from emp_back;
  1. 修改工作地点在NEW YORK或CHICAGO的员工工资,工资增加500
select * from emp_back;

update emp_back
set sal = sal + 500
where (select loc
              from dept
              where dept.deptno = emp_back.deptno)
              in ('NEW YORK','CHICAGO'); 
              
select * from emp_back;

练习5

  1. 重复做一下刚才的案例。
--例1.在emp_back表中增加一个列dname, 来存储部门名称.
alter table emp_back
add(dname varchar2(14));
--例2.使用相关子查询更新dname列为正确的部门名称.
update emp_back e
set dname = 
           (select dname
           from dept d
           where deptno = e.deptno);

select * from emp_back;

练习6

  1. 删除经理编号为7566的员工记录
select * from emp_back;

delete from emp_back
where mgr in 7566;

select * from emp_back;
  1. 删除工作在NEW YORK的员工记录
select * from emp_back;

delete from emp_back 
where (select loc 
              from dept 
              where dept.deptno=emp_back.deptno)
              in 'NEW YORK';

select * from emp_back;
  1. 删除工资大于所在部门平均工资的员工记录
select * from emp_back;

delete from emp_back eb
where sal > (select avg(sal)
                    from emp_back
                    where eb.deptno = emp_back.deptno);

select * from emp_back;

练习7

分析如下语句序列,哪些语句会结束事务?

INSERT…

UPDATE..

INSERT

ROLLBACK; --结束事务

DELETE..

DELETE..

SELECT..

COMMIT.. --结束事务

INSERT..

INSERT..

DELETE..

GRANT.. --结束事务

INSERT..

SELECT; 

练习8

  1. test表为空表,分析如下语句操作后,最后test表的状态。
    INSERT INTO test(id,name) values(1, 'a');
    INSERT INTO test(id,name) values(2, 'b');
    SAVEPOINT s1;
    INSERT INTO test(id,name) values(3, 'c');
    INSERT INTO test(id,name) values(4, 'd');
    DELETE FROM test WHERE id in (1,3);
    ROLLBACK TO s1;
    DELETE FROM test WHERE id in (2,4);
    COMMIT;--提交就不能回滚咯 表中只有 values(1, 'a')  
    ROLLBACK;

练习9

分析如下两个会话,执行完每一步时的数据库状态。

会话A

1.UPDATE EMP SET sal = sal+500 WHERE deptno= 10;
---- 1 


3.SELECT sal FROM EMP WHERE deptno = 10;
----- 2 


6.COMMIT:
----3
8.SELECT sal FROM EMP WHERE deptno = 10;
---5


会话B


2.SELECT sal FROM EMP WHERE deptno = 10;
---4

4.UPDATE EMP SET sal = sal+500 WHERE deptno = 20;
---6
5.UPDATE EMP SET sal = sal+1000 WHERE deptno = 10;
--7
7.COMMIT;
--8

课后作业

1.使用如下语句,创建学生表student和班级表class

   create table tab_student_11 (        --学生表
               xh char(4),--学号
               xm varchar2(10),--姓名
               sex char(2),--性别
               birthday date,--出生日期
               sal number(7,2), --奖学金
               studentcid number(2) --学生班级号
    );
   create table tab_class_11 (   --班级表
                classid number(2), --班级编号
                cname varchar2(20),--班级名称
                ccount  number(3) --班级人数
    )
  1. 基于上述学生表和班级表,完成如下问题

(1)添加三个班级信息为:1,JAVA1班,null
2,JAVA2班,null
3,JAVA3班,null

insert into tab_class_11
            values(1,'JAVA1班',null);
insert into tab_class_11
            values(2,'JAVA2班',null);
insert into tab_class_11
            values(3,'JAVA3班',null);

(2)添加学生信息如下:‘A001’,‘张三’,‘男’,‘01-5月-05’,100,1

insert into tab_student_11
            values('A001','张三','男','01-5月-05',100,1);

(3)添加学生信息如下:'A002','MIKE','男','1905-05-06',10

insert into tab_student_11
            values('A002','MIKE','男','06-5月-1905',10,null);

(4)插入部分学生信息: 'A003','JOHN','女’

insert into tab_student_11(xh,xm,sex)
            values('A003','JOHN','女');

(5)将A001学生性别修改为'女‘

update tab_student_11 set sex = '女'
       where xh = 'A001';

(6)将A001学生信息修改如下:性别为男,生日设置为1980-04-01

update tab_student_11 set sex = '男',
       birthday = '01-4月-1980'
       where xh in 'A001';

(7)将生日为空的学生班级修改为Java3班

update tab_student_11 set studentcid = 3
                      where birthday is null;

(8)请使用一条SQL语句,使用子查询,更新班级表中每个班级的人数字段

update tab_class_11 set ccount =
                    (select count(*) from tab_student_11
                            where tab_class_11.classid = tab_student_11.studentcid);

3.使用如下语句,建立以下表

create table copy_emp (
    empno number(4),
    ename varchar2(20),
    hiredate date default sysdate ,
    deptno number(2),
    sal number(8,2)
);

select * from copy_emp;
  1. 在第三题表的基础上,完成下列问题

(1)在表copy_emp中插入数据,要求sal字段插入空值,部门号50,参加工作时间为2000年1月1日,其他字段随意

insert into copy_emp
       values(520,'heheda','01-1月-00',50,null);

(2)在表copy_emp中插入数据,要求把emp表中部门号为10号部门的员工信息插入

insert into copy_emp
       select empno,ename,hiredate,deptno,sal from emp where deptno in 10;

(3)修改copy_emp表中数据,要求10号部门所有员工涨20%的工资

update copy_emp set sal = sal + sal * 0.2
       where deptno in 10;

(4)修改copy_emp表中sal为空的记录,工资修改为平均工资

update copy_emp set sal = (select avg(sal) from copy_emp)
       where sal is null;

(5)把工资为平均工资的员工,工资修改为空

update copy_emp set sal = null
       where sal = (select avg(sal) from copy_emp);

(6)另外打开窗口2查看以上修改

select * from copy_emp;

(7)执行commit,窗口2中再次查看以上信息

commit;
select * from copy_emp;

(8)删除工资为空的员工信息

delete from copy_emp
       where sal is null;

(9)执行rollback

rollback;
select * from copy_emp;

分割线


博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。

你可能感兴趣的:(Oracle初级测试题十一(19/19)--数据操作与事务控制)