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;

分割线


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容