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;

 

發佈了24 篇原創文章 · 獲贊 40 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章