练习1
- 向部门表新增一个部门,部门编号为50,部门名称为HR,工作地点为SY。
insert into dept(deptno,dname,loc)
values(50,'HR','SY');
- 向部门表新增一个部门,部门编号为60,部门名称为MARKET。
insert into dept(deptno,dname)
values(60,'MARKET');
练习2
- 向员工表中新增一个员工,员工编号为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
- 使用CREATE TABLE emp_back as SELECT * FROM EMP WHERE 1=0,创建emp_back表,拷贝下来即可。
create table emp_back
as select * from emp where 1 = 0;
- 把emp表中入职日期大于1982年1月1日之前的员工信息复制到emp_back表中。
insert into emp_back
select *
from emp
where hiredate > '01-1月-82';
练习4
- 修改部门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;
- 修改奖金为null的员工,奖金设置为0
select * from emp_back;
update emp_back
set comm = 0
where comm is null;
select * from emp_back;
- 修改工作地点在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.在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
- 删除经理编号为7566的员工记录
select * from emp_back;
delete from emp_back
where mgr in 7566;
select * from emp_back;
- 删除工作在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;
- 删除工资大于所在部门平均工资的员工记录
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
- 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,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)在表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;
分割线
博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。