Oracle数据库上机练习2
Oracle上机练习题(二)
试卷总分:100
答题时间:240分钟
一、根据scott账号的下各个表,完成如下SQL语句题
1.
列出至少有一个雇员的所有部门[3分]
select distinct dname from dept where deptno in(select distinct deptno from emp);
2.
列出薪金比"SMITH"多的所有雇员[3分]
select ename, sal from emp where sal>(select sal from emp where ename = 'SMITH');
3.
列出入职日期早于其直接上级的所有雇员[3分]
select ename from emp where hiredate<(select hiredate from emp where empno = E.MGR);
4.
找员工姓名和直接上级的名字[3分]
select emp,ename as 员工姓名,MGR,ename as 经理姓名 from emp,(select ename,empno from emp) MGR where emp.MGR=MGR.EMPNO(+);
5.
显示部门名称和人数[3分]
select dname 部门名称, cou 人数 from dept d,(select deptno,count(empno) cou from emp group by deptno) e where d.deptno=e.deptno;
6.
显示每个部门的最高工资的员工[3分]
select * from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno);
7.
显示每个部门的工资前2名的员工[3分]
select ename,sal,deptno from emp e where (select count(empno) from emp where deptno=e.deptno and sal>e.sal)<=1;
8.
显示出和员工号7369部门相同的员工姓名,工资[3分]
select ename,sal from emp where deptno=(select deptno from emp where empno=7369);
9.
显示出和姓名中包含"W"的员工相同部门的员工姓名[3分]
select ename from emp where deptno=(select deptno from emp where ename like '%W%');
10.
显示出工资大于平均工资的员工姓名,工资[3分]
select ename,sal from emp where sal>(select avg(sal) from emp);
11.
显示出工资大于本部门平均工资的员工姓名,工资[3分]
select ename,sal from emp e where sal>(select avg(sal) from emp where deptno=e.deptno);
12.
显示员工"KING"所管理的员工姓名[3分]
select ename from emp where mgr=(select empno from emp where ename='KING');
13.
显示每位经理管理员工的最低工资,及最低工资者的姓名[3分]
select sal,ename from emp where(mgr,sal) in (select mgr,min(sal) from emp group by mgr);
14.
显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间[3分]
select ename,hiredate from emp where hiredate>(select hiredate from emp where sal=(select max(sal) from emp));
15.
显示出平均工资最高的的部门平均工资及部门名称[3分]
select avg(sal),dname from emp e,dept d where e.deptno=d.deptno group by e.deptno,dname having avg(sal)=(select max(avg(sal)) from emp group by deptno);
16.
显示平均工资为>2000的职位[3分]
select job,avg(sal) from emp group by job having avg(sal)>2000;
17.
计算工资在2000以上,各种职位的平均工资大于3000的职位及平均工资[3分]
select job,avg(sal) from emp where sal>2000 group by job having avg(sal)>3000;
18.
找每个部门的最高和最低的工资[3分]
select deptno,max(sal),min(sal) from emp group by deptno;
19.
找每个部门中每种职位的最高和最低的工资[3分]
select deptno,job,max(sal),min(sal) from emp group by deptno,job;
20.
显示出工作名称(job)中包含"MAN"的员工平均工资,最高工资,最低工资及工资的和[3分]
select avg(sal),max(sal),min(sal),sum(sal) from emp where job like '%MAN%';
21.
显示出20号部门的员工人数[3分]
select count(1) from emp where deptno=20;
22.
显示出平均工资大于2000的部门名称及平均工资[3分]
select dname,avg(sal) from emp,dept where emp.deptno=dept.deptno group by dname having avg(sal)>2000;
23.
显示每个部门每种工作平均工资大于2500的部门及工作[3分]
select deptno,job from emp group by deptno,job having avg(sal)>2500;
24.
显示出工作名称中包含"MAN",并且平均工资大于1000的工作名称及平均工资[3分]
select job,avg(sal) from emp where job like '%MAN%' group by job having avg(sal)>1000;
25.
显示出平均工资最高的的部门平均工资[3分]
select max(avg(sal)) from emp group by deptno;
26.
列出最低工资大于1500的各种工作[3分]
select job,min(sal) from emp group by job having min(sal)>1500;
27.
列出各部门的员工数量及平均工作年限[3分]
select count(empno),avg(months_between(sysdate,hiredate)/12) from emp group by deptno;
二、按照以下题意完成操作。
请按照如下表格式,按照要求操作数据:
student --学生表
xh char(4), --学号
xm varchar2(10), --姓名
sex char(2), --性别
birthday date, --日期
sal number(7,2) --奖学金
studentcid number(2) --学生班级号
班级class
classid number(2), --班级编号
cname varchar2(20) --班级名字
ccount number(3) --班级人数
1.
添加三个班级信息为:
1,JAVA1班,null
2,JAVA2班,null
3,JAVA3班,null[1分]
insert into class values(1,'Java1班',null);
insert into class values(2,'Java2班',null);
insert into class values(3,'Java3班',null);
2.
添加学生信息'A001','张三','男','01-5月-05',100,Java1班[1分]
insert into student values('A001','张三','男','01-5月-05',10,1);
3.
修改ORACLE的默认时间格式为:'yyyy-mm-dd'
添加学生信息如下:'A002','MIKE','男','1905-05-06',10[1分]
alter session set nls_date_format='yyyy-mm-dd';
insert into student values('A002','MIKE','男','1905-05-06',10,1);
4.
插入部分学生信息:'A003','JOHN','女'[1分]
insert into student(xh,xm,sex) values('A003','JOHN','女');
5.
将A001学生性别修改为‘女’[1分]
update student set sex='女' where xh='A001';
6.
将A001学生信息修改如下:性别为男,生日设置为1980-04-01[1分]
update student set sex='男',birthday='1980-04-01' where xh='A001';
7.
将生日为空的学生班级修改为Java3班[1分]
update student set classid=3 where birthday is null;
8.
请使用一条SQL语句,使用子查询,更新班级表中每个班级的人数字段[3分]
update class set ccount=(select count(1) from student where ccount=class.studentcid);
三、按照以下题意,完成SQL语句操作。
建立以下表
CREATE TABLE copy_emp (
empno number(4),
ename varchar2(20),
hiredate date default sysdate ,
deptno number(2),
sal number(8,2));
1.
表copy_emp中插入数据,要求sal字段插入空值,部门号50,参加工作时间为2000年1月1日,其他字段随意[1分]
insert into copy_emp(empno,ename,hiredate,deptno,sal) values(1,'a','01-1月-00',50,null);
2.
表copy_emp中插入数据,要求把emp表中部门号为10号部门的员工信息插入[1分]
insert into copy_emp(empno,ename,hiredate,deptno,sal) select empno,ename,hiredate,deptno,sal where deptno=10;
3.
修改copy_emp表中数据,要求10号部门所有员工涨20%的工资[1分]
update copy_emp set sal=sal*1.2 where deptno=10;
4.
修改copy_emp表中sal为空的记录,工资修改为平均工资[1分]
update copy_emp set sal=(select avg(sal) from copy_emp) where sal is null;
5.
工资为平均工资的员工,工资修改为空,参加工作时间修改为默认值[1分]
update copy_emp set='',hiredate=default where sal=(select avg(sal) from copy_emp);
6.
另外打开窗口2查看以上修改[1分]
sqlplus;
7.
执行commit,窗口2中再次查看以上信息[1分]
commit;
8.
删除工资为空的员工信息[1分]
delete from copy_emp where sal is null;
9.
执行rollback[1分]
rollback;
- Oracle数据库上机练习3
- Oracle数据库上机练习4
- Oracle数据库上机练习5
- Oracle数据库上机练习6
- SDUT-1140 面向对象程序设计上机练习一(函数重载)
- 第一章上机练习2 求两数的和
- 【C++ 函数模板】SDUT-1141 面向对象程序设计上机练习二(函数模板)
- jQuery与Ajax小练习-二级联动(从Oracle数据库获取数据)
- c# 程序设计及应用教程上机A.2.1————密码输入和显示练习
- 十一章上机练习5
- 面向对象程序设计上机练习一(函数重载)
- 面向对象程序设计上机练习十一(运算符重载)
- java上机练习02
- 第15章上机练习2
- C#第十章上机练习1
- C# 第十一章上机练习1
- 面向对象程序设计上机练习二(函数模板)
- 十一章 上机练习4 + 5
- 面向对象程序设计上机练习八(对象数组)
- ACCP JAVA1基础 上机练习 购物管理系统 打印产品清单