当前位置:文档之家› Oracle试题

Oracle试题

Oracle试题
Oracle试题

模块一 SQL(DQL)

Part I(第一天)

01. 查询员工表所有数据, 并说明使用*的缺点

答:

select * from emp;

使用*的缺点有

a) 查询出了不必要的列

b) 效率上不如直接指定列名

02. 查询职位(JOB)为'PRESIDENT'的员工的工资

答:

select * from emp where job = 'PRESIDENT';

03. 查询佣金(COMM)为0 或为NULL 的员工信息

答:重点是理解0 与null 的区别

select * from emp where comm = 0 or comm is null;

04. 查询入职日期在1981-5-1 到1981-12-31 之间的所有员工信息

答:通过此题掌握常用日期函数

select * from emp where hiredate

between to_date('1981-5-1','yyyy-mm-dd') and to_date('1981-12-31','yyyy-mm-dd');

05. 查询所有名字长度为4 的员工的员工编号,姓名

答:

select * from emp where length(ename) = 4;

06. 显示10 号部门的所有经理('MANAGER')和20 号部门的所有职员('CLERK')的详细信息

答:

select * from emp where deptno = 10 and job = 'MANAGER' or deptno = 20 and job ='CLERK';

07. 显示姓名中没有'L'字的员工的详细信息或含有'SM'字的员工信息

答:考察知识点模糊查询

select * from emp where ename not like '%L%' or ename like '%SM%'; 08. 显示各个部门经理('MANAGER')的工资

答:

select sal from emp where job = 'MANAGER';

09. 显示佣金(COMM)收入比工资(SAL)高的员工的详细信息

答:

select * from emp where comm > sal;

10. 把hiredate 列看做是员工的生日,求本月过生日的员工(考察知识点:单行函数)

答:

select * from emp where to_char(hiredate, 'mm') = to_char(sysdate , 'mm');

11. 把hiredate 列看做是员工的生日,求下月过生日的员工(考察知识点:单行函数)

答:

select * from emp where to_char(hiredate, 'mm') =

to_char(add_months(sysdate,1) , 'mm');

12. 求1982 年入职的员工(考察知识点:单行函数)

答:

select * from emp where to_char(hiredate,'yyyy') = '1982';

13. 求1981 年下半年入职的员工(考察知识点:单行函数)

答:

select * from emp where hiredate

between to_date('1981-7-1','yyyy-mm-dd') and to_date('1982-1-1','yyyy-mm-dd') - 1;

14. 求1981 年各个月入职的的员工个数(考察知识点:组函数)

答:

select count(*), to_char(trunc(hiredate,'month'),'yyyy-mm')

from emp where to_char(hiredate,'yyyy')='1981'

group by trunc(hiredate,'month')

order by trunc(hiredate,'month');

Part II(第二天)

01. 查询各个部门的平均工资

答:考察知识点:分组

select deptno,avg(sal) from emp group by deptno;

02. 显示各种职位的最低工资

答:考察知识点:分组

select job,min(sal) from emp group by job;

03. 按照入职日期由新到旧排列员工信息

答:考察知识点:排序

select * from emp order by hiredate desc;

04. 查询员工的基本信息,附加其上级的姓名

答:考察知识点:自连接

select e.*, e2.ename from emp e, emp e2 where e.mgr = e2.empno;

05. 显示工资比'ALLEN'高的所有员工的姓名和工资

答:考察知识点:子查询

select * from emp where sal > (select sal from emp where ename='ALLEN');

分析:当查询结果是一行一列时,可以将此结果看做一个值,参与条件比较。

06. 显示与'SCOTT'从事相同工作的员工的详细信息

答:考察知识点:子查询

select * from emp where job = (select job from emp where ename='SCOTT');

分析:同第5 题

07. 显示销售部('SALES')员工的姓名

答:考察知识点:连接查询

select ename from emp e, dept d where e.deptno = d.deptno and d.dname='SALES';

08. 显示与30 号部门'MARTIN'员工工资相同的员工的姓名和工资

答:考察知识点:子查询

select ename, sal from emp

where sal = (select sal from emp where deptno=30 and ename='MARTIN');

分析:同第5 题

09. 查询所有工资高于平均工资(平均工资包括所有员工)的销售人员('SALESMAN') 答:考察知识点:子查询

select * from emp where job='SALESMAN' and sal > (select avg(sal) from emp); 10. 显示所有职员的姓名及其所在部门的名称和工资

答:考察知识点:表连接

select ename, job, dname from emp e, dept d where e.deptno = d.deptno;

11. 查询在研发部('RESEARCH')工作员工的编号,姓名,工作部门,工作所在地

答:考察知识点:表连接

select empno,ename,dname,loc from emp e, dept d

where e.deptno = d.deptno and danme='RESEARCH';

12. 查询各个部门的名称和员工人数

答:考察知识点:子查询,表连接

select * from (select count(*) c, deptno from emp group by deptno) e

inner join dept d on e.deptno = d.deptno;

分析:主要思路是要将子查询结果看做一个临时表,此临时表又可以与其他表做表连接

13. 查询各个职位员工工资大于平均工资(平均工资包括所有员工)的人数和员工职位

答:考察知识点:子查询

select job, count(*) from emp where sal > (select avg(sal) from emp) group by job; 分析:查询结果是一行一列,可以将查询结果看做一个值,进行条件比较

14. 查询工资相同的员工的工资和姓名

答:考察知识点:子查询

select * from emp e where (select count(*) from emp where sal = e.sal group by sal) > 1;

分析:此题目类似于17 题,见17 题分析。

15. 查询工资最高的3 名员工信息

答:考察知识点:子查询,rownum

select * from (select * from emp order by sal desc) where rownum <= 3;

分析:见21 题要点一

16. 按工资进行排名,排名从1 开始,工资相同排名相同(如果两人并列第1 则没有第2 名,从第

三名继续排)

答:考察知识点:子查询

select e.*, (select count(*) from emp where sal > e.sal)+1 rank from emp e order by rank;

分析:

此题的要点在于理解select count(*) from emp where sal > e.sal+1 的含义,e.sal 代表当前员工,

该子查询的含义就是求比当前员工工资高的人数个数:比此员工工资高的人数个数如果为

0,表示此人排名第一,比此员工工资高的人数个数如果为1,表示此人排名第二…所以该

子查询结果就表示排名。

17. 求入职日期相同的(年月日相同)的员工

答:考察知识点:子查询

select * from emp e where (select count(*) from emp where e.hiredate=hiredate)>1; 分析:常见的一个误解就是把此题当做自连接做:

select * from emp e1, emp e2 where e1.hhireiredate = e2.date and e1.empno <>

e2.empno;

这样做的结果中对于只有两个日期相等的没有错误,查询结果有2 条,但如果有三个

日期相

等的查询结果就是6 条,其中3 条是重复的。

要点也是理解子查询的含义select count(*) from emp where e.hiredate=hiredate,代表取得与当

前员工入职日期相等的人数个数,如果个数大于1 表示此日期有相等的。

18. 查询每个部门的最高工资

答:考察知识点:分组

select deptno, max(sal) maxsal from emp group by deptno order by deptno;

19. 查询每个部门,每种职位的最高工资

答:考察知识点:分组

select deptno, job, max(sal) from emp group by deptno, job order by deptno, job;

分析:要点是理解多列分组:部门与职位都相同的分为一组,求每组的最高工资,其实就是

表示每个部门,每种职位的最高工资

20. 查询每个员工的信息及工资级别(用到表Salgrade)

答:考察知识点:不等值连接

select * from salgrade;

select e.*, sg.grade from emp e, salgrade sg where sal between losal and hisal; 21. 查询工资最高的第6-10 名员工

答:考察知识点:子查询, rownum

select * from (

select e.*,rownum rn from

(select * from emp order by sal desc) e

where rownum <=10)

where rn > 5;

分析:

要点一是rownum 不能直接和order by 连用,因为rownum 先产生,order by 后执行,因此

需要将

select * from emp order by sal desc

先排序之后的结果看做一个临时表,再对此临时表产生rownum 编号。

要点二是rownum 不能用作>或>=的比较条件,因此不能够直接这样写

select e.* from

(select * from emp order by sal desc) e

where rownum > 5 and rownum <=10;

因此需要将

select e.*,rownum rn from

(select * from emp order by sal desc) e

where rownum <=10

查询结果看做一个临时表,这个临时表除了有表e 中的所有列之外,多添加一个rownum 列

并取别名为rn,这时rn 已经作为临时表中一个真实的列存在了,因此可以使用>或>=比较

条件:

select * from (

select e.*,rownum rn from

(select * from emp order by sal desc) e

where rownum <=10)

where rn > 5;

两次查询示例图如下:第一次取前10 条,第二次排除前5 条

22. 查询各部门工资最高的员工信息

答:考察知识点:子查询

select * from emp e where e.sal = (select max(sal) from emp where (deptno = e.deptno));

分析:要点同样是理解子查询select max(sal) from emp where (deptno = e.deptno)获取当前部

门(e.deptno)的最高工资,再将此最高值与当前工资(e.sal)进行比较。

思路2:

select e.* from (select max(sal) maxsal, deptno from emp group by deptno) b, emp e

where e.deptno = b.deptno and b.maxsal = e.sal;

将子查询看做一个临时表,临时表中有最高工资列maxsal,以及deptno 列,此临时表与真

实表emp 做表连接,连接条件为emp 表中的工资要等于临时表的最高工资并且两表的部门

编号要相等。

23. 查询每个部门工资最高的前2 名员工

答:考察知识点:子查询

select * from emp e where

(select count(*) from emp where sal > e.sal and e.deptno = deptno) < 2

order by deptno, sal desc;

分析:此题类似于第16 题,需要理解select count(*) from emp where sal > e.sal and e.deptno =

deptno 的含义:求工资大于当前员工工资(e.sal)并且部门编号等于当前员工部门编号

(e.deptno)的员工的个数,此个数+1 表示排名,< 2 表示取前两名。

思路2:

使用oracle 提供的分析函数rank:

select * from (

select rank() over (partition by deptno order by sal desc) rank, e.* from emp e

) where rank < 3;

rank 函数的作用是产生排名,与普通函数不同,高亮部分都是函数语法部分,其中over 是

关键字,总体意思是指按部门编号分组(partition by deptno),按工资降序(order by sal desc)

排名。

思路3:

步骤1:按照部门,工资降序排列,并产生编号

select e.*,rownum rn from (select * from emp order by deptno,sal desc) e;

步骤2:在此基础上再按照部门编号分组,求每组的编号的最小值

select min(rn) minrank,deptno from

(select e.*,rownum rn from (select * from emp order by deptno,sal desc) e) group by deptno;

步骤3:将两步产生的结果看做是临时表分别称为t1,t2,做连接,连接条件时t1 表中

部门编号等于t2 部门编号且t1.rn >= t2.minrank and t1.rn <= t2.minrank+1 select t1.* from

(select e.*,rownum rn from (select * from emp order by deptno,sal desc) e) t1, (select min(rn) minrank,deptno from

(select e.*,rownum rn from (select * from emp order by deptno,sal desc) e) group by deptno) t2

where t1.deptno = t2.deptno and t1.rn >= t2.minrank and t1.rn <= t2.minrank+1;

24.查询出有3 个以上下属的员工信息

答:考察知识点:自连接,子查询

select * from emp e where

(select count(*) from emp where e.empno = mgr) > 2;

分析:关键是理解连接条件e.empno = mgr 是表示连接当前员工(e.empno)和他的下属(mgr)

25. 查询所有大于本部门平均工资的员工信息()

答:考察知识点:子查询

select * from emp e where sal >

(select avg(sal) from emp where (deptno = e.deptno))

order by deptno;

分析:思路与22 题相同。

26. 查询平均工资最高的部门信息

答:考察知识点:子查询,组函数,连接查询

select d.*, avgsal from dept d, (select avg(sal) avgsal, deptno from emp group by deptno) se

where avgsal = (select max(avg(sal)) from emp group by deptno) and d.deptno = se.deptno;

分析:

步骤1:求每个部门的平均工资:

select avg(sal) avgsal, deptno from emp group by deptno;

步骤2:求最高的平均工资:

select max(avg(sal)) from emp group by deptno;

步骤3:求平均工资最高的部门信息,连接步骤1 产生的临时表与真实表dept:

select d.*, avgsal from dept d, (select avg(sal) avgsal, deptno from emp group by deptno) se

where avgsal = (select max(avg(sal)) from emp group by deptno) and d.deptno = se.deptno;

27. 查询大于各部门总工资的平均值的部门信息

答:考察知识点:子查询,组函数,连接查询

select d.*,sumsal from dept d, (select sum(sal) sumsal, deptno from emp group by deptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno = d.deptno;

分析:

步骤1:求每个部门总工资

select sum(sal) sumsal, deptno from emp group by deptno;

步骤2:求每总工资平均值

select avg(sum(sal)) from emp group by deptno;

步骤3:求大于总工资平均值的部门信息,连接步骤1 产生的临时表与真实表dept:

select d.*,sumsal from dept d, (select sum(sal) sumsal, deptno from emp group by deptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno =

d.deptno;

28. 查询大于各部门总工资的平均值的部门下的员工信息(考察知识点:子查询,组函数,连接

查询)

答:考察知识点:子查询,组函数,连接查询

select e.*,sumsal from emp e, (select sum(sal) sumsal, deptno from emp group by deptno) se

where sumsal >(select avg(sum(sal)) from emp group by deptno) and se.deptno = e.deptno;

分析:类似于26 题,27 题

29. 查询没有员工的部门信息

答:考察知识点:表连接

select d.* from dept d left join emp e on (e.deptno = d.deptno) where empno is null; 分析:利用了左外连接的特点,部门连接员工时,没有匹配记录的部门对应的员工编号列肯

定为null

30. 查询用户(users 表)huxz 所下所有订单编号,下单日期,总价格(orders 表),并包括订

单中的商品数量(orderitem 表),名称(product 表),价格(product 表)

答:考察知识点:多表连接

select https://www.doczj.com/doc/2d7765467.html,ername, o.orderid, o.orderdate, o.totalprice, p.productname, p.price, i.qty from users u inner join orders o on (https://www.doczj.com/doc/2d7765467.html,ername = https://www.doczj.com/doc/2d7765467.html,ername)

inner join orderitem i on (o.orderid = i.orderid)

inner join product p on (p.productid = i.productid)

where https://www.doczj.com/doc/2d7765467.html,ername = 'huxz';

31. 查询100001 号商品被哪些顾客(users 表)购买过,下单日期(orders 表),每人购买的数

量(orderitem 表),购买时的价格(product 表)

答:考察知识点:多表连接

select https://www.doczj.com/doc/2d7765467.html,ername, o.orderdate, p.productname, p.price, i.qty

from product p inner join orderitem i on (p.productid = i.productid)

inner join orders o on (o.orderid = i.orderid)

inner join users u on (https://www.doczj.com/doc/2d7765467.html,ername = https://www.doczj.com/doc/2d7765467.html,ername)

where p.productid = 100001;

32. 查询出哪些商品从未被订购过

答:考察知识点:连接查询

select p.* from product p left join orderitem i on(i. productid = p. productid) where i.orderitemid is null;

分析:同29 题

33. 查询出被订购过2 次以上的商品信息

答:考察知识点:连接查询,子查询

select p.* from product p

where (select count(*) from orderitem where productid = p. productid) >= 2;

分析:子查询select count(*) from orderitem where productid = p. productid 的含义是:当前商

品在orderitem 表中出现的次数,即被订购的次数

Part III(面试题目)

01. tmp 表中有如下记录(建表SQL 见emp.sql)

要求结果格式为:

答:考察知识点:case… when… count 函数

select rq,

count(case when shengfu='WIN' then 1 else null end) WIN,

count(case when shengfu='LOSE' then 1 else null end) LOSE from tmp group by rq ; 分析:

要点:在计数时,配合case…when…语句只统计取值为WIN 或LOSE 的个数。case 语句返

回不为null 的值即会加入count 计数,返回null 则不会加入count 计数。

02. 查询当前月有多少天

答:考察知识点日期函数的灵活运用

select trunc(add_months(sysdate,1),'month') - trunc(sysdate,'month') from dual; 03. pages 表有四个字段,id, url,title,body。如图:

现要求将url 匹配的排在最前,title 匹配的其次,body 匹配最后,没有任何字段匹配的,不

返回。现要求查询所有匹配baidu 的记录,最终查询结果如图:

建表语句在emp.sql 中

答:考察知识点:union

select id,content from (

select id, 3 mark, url content from pages where url like '%baidu%'

union

select id, 2, title from pages where title like '%baidu%'

union

select id, 1, body from pages where body like '%baidu%'

) order by mark desc;

要点:union 可以用来合并多次查询结果。这里需要注意多次查询的结果列的个数和类型必

须相同,合并后的结果集也可以看做一张表,表的列的类型和名称由union 的第一条查询结

果来决定。

这里用到一个技巧:手工指定一个优先级mark 列,最后根据mark 列排序。

04. 现有STUDENT(学生), COURSE(课程), SC(成绩)表,完成以下需求(建表语句在emp.sql

中,综合考察)

a) 查询选修课程为web 的学员学号和姓名

答:

select s.sid,https://www.doczj.com/doc/2d7765467.html, from student s

inner join sc on(s.sid=sc.sid) inner join course c on (c.cid=sc.cid)

where https://www.doczj.com/doc/2d7765467.html, = 'web';

分析:课程与学生表没有直接联系,必须通过中间成绩表做2 次表连接

b) 查询课程编号为2 的学员姓名和单位

答:

select https://www.doczj.com/doc/2d7765467.html,,s.dept from student s inner join sc on (s.sid=sc.sid)

where sc.cid = 2;

c) 查询不选修4 号课程的学员姓名和单位

答:

select name,dept from student where sid not in

(select s.sid from student s left join sc on s.sid = sc.sid where cid = 4);

或:

select name,dept from student

where not exists(select sid from sc where sc.sid = s.sid and cid = 4);

分析:要点是先要查询出选修了4 号课程的学员id,再从所有学员中排除这些id 的学员。方法2 效率较高。

d) 查询选修全部课程的学员姓名和单位

答:

select https://www.doczj.com/doc/2d7765467.html,,s.dept from student s where sid in

(select sid from sc group by sid having (count(*) = (select count(*) from course))); 分析:

步骤1:查询出所有课程的数目

select count(*) from course;

步骤2:在成绩(sc)表,按学员id 分组,看每组的个数,该个数等于步骤1 课程总数

sid 即为选修了所有课程的学员id

select sid from sc group by sid having (count(*) = (select count(*) from course));

步骤3:再根据该sid 查询学员的详细信息

select https://www.doczj.com/doc/2d7765467.html,,s.dept from student s where sid in

(select sid from sc group by sid having (count(*) = (select count(*) from course)));

e) 查询选修课程超过3 门的学员姓名和单位

答:

select https://www.doczj.com/doc/2d7765467.html,,s.dept from student s

where sid in (select sid from sc group by sid having (count(*) > 3));

f) 找出没有选修过Teacher LI 讲授课程的所有学生姓名

答:

select https://www.doczj.com/doc/2d7765467.html, from student s where sid not in

(select sid from course c left join sc on (c.cid = sc.cid) where c.teacher='Teacher LI');

g) 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

答:

select s.*, b.avgsal from student s,

(select sc.sid,avg(score) avgscore from sc ,

(select sid from sc where score < 60 group by sid having(count(*) >=2)) a where sc.sid = a.sid group by sc.sid) b

where s.sid = b.sid;

分析:

步骤1:查询所有两门以上不及格的学员id

select sid from sc where score < 60 group by sid having(count(*) >=2);

步骤2:步骤1 结果与真实表sc 做连接,算平均成绩

select sc.sid,avg(score) avgscore from sc,

(select sid from sc where score < 60 group by sid having(count(*) >=2)) a where sc.sid = a.sid group by sc.sid;

步骤3:步骤2 结果与真实表student 做连接,查学员姓名

select s.*, b. avgscore from student s,

(select sc.sid,avg(score) avgscore from sc ,

(select sid from sc where score < 60 group by sid having(count(*) >=2)) a where sc.sid = a.sid group by sc.sid) b

where s.sid = b.sid;

思路2:

步骤1:同上

步骤2:步骤1 结果与真实表sc,student 共3 张表做连接

select s.*,avg(sc.score) avgscore from student s, sc,

(select sid from sc where score < 60 group by sid having(count(*) >=2)) a where s.sid = sc.sid and s.sid = a.sid;

步骤3:可以发现,该结果中sid, name, dept, age 都是取值都相同,按照这些列直接进

行分组即可:

select s.*,avg(sc.score) avgscore from student s, sc,

(select sid from sc where score < 60 group by sid having(count(*) >=2)) a where s.sid = sc.sid and s.sid = a.sid group by s.sid, https://www.doczj.com/doc/2d7765467.html,, s.dept, s.age;

h) 列出既学过1 号课程,又学过2 号课程的所有学生姓名

答:

select https://www.doczj.com/doc/2d7765467.html, from student s inner join

(select sc.sid from sc where sc.cid in (1,2) group by sid having (count(*) = 2)) a on (s.sid = a.sid);

分析:要点是不仅要学过1,2 号课程in (1,2),并且要求同时学过此两门课count(*) = 2

i) 列出1 号课成绩比2 号课成绩高的所有学生的学号,姓名和1 号课和2 号课的成绩

答:

select s.sid, https://www.doczj.com/doc/2d7765467.html,, sc1.score, sc2.score from sc sc1,sc sc2,student s

where s.sid = sc1.sid and sc1.sid = sc2.sid

and sc1.cid = 1 and sc2.cid = 2 and sc1.score > sc2.score;

分析:要点在于自连接,把成绩表拆成两张表来看,sc1 中只考虑1 号课,sc2 中只考虑2 号课且sc1.score > sc2.score;最后再考虑将结果与student 表连接查询姓名。

05. 现有test 表,表中数据如图所示:

要求按照格式如下输出结果:

a) 连续的编号要求如下格式

b) 不连续的编号要求如下格式

答:

a) 求连续的,考察知识点:rownum,子查询

分析:查看连续id 与rownum 之间的关系,运行

select id, rownum, id-rownum from test;

参考下图看出规律:

可以发现,id-rownum 取值相同的,就是那些id 编号连续的。按照id-rownum 分组并求

每组的最大,最小值即可。

select a.* from

(select min(id) begin, max(id) end from test group by (id - rownum) order by id - rownum) a;

b) 不连续的,考察知识点,rownum,子查询

分析:

步骤一:

查询有上一条记录的个数

select id, (select count(*) from test where id+1 = t1.id) from test t1;

查询有下一条记录的个数

select id, (select count(*) from test where id-1 = t1.id) from test t1;

分析结果可知,个数为0 的即为我们所需要的。

步骤二:

select id, rownum r1 from test t1 where (select count(*) from test where id+1 =

t1.id) = 0;

select id, rownum r2 from test t1 where (select count(*) from test where id-1 = t1.id) = 0;

分析结果可知,要求如上图格式的数据将查询1 中的r1-1 = 查询2 中的r2 列即可:select b.id begin, a.id end from

(select id, rownum r1 from test t1 where (select count(*) from test where id+1 =

t1.id) = 0) a,

(select id, rownum r2 from test t1 where (select count(*) from test where id-1 =

t1.id) = 0) b

where r1-1=r2;

06. 根据EMP 表数据产生如下格式的报表(统计各部门,各职位的人数)

答:方法1 考察知识点case

select deptno,

count(case when job = 'PRESIDENT' then 1 else null end) PRESIDENT, count(case when job = 'MANAGER' then 1 else null end) MANAGER, count(case when job = 'CLERK' then 1 else null end) CLERK,

count(case when job = 'SALESMAN' then 1 else null end) SALESMAN, count(case when job = 'ANALYST' then 1 else null end) ANALYST from emp group by deptno order by deptno;

方法2 考察知识点:自连接

select d.deptno,

count(distinct PRESIDENT.empno) PRESIDENT,

count(distinct MANAGER.empno) MANAGER,

count(distinct CLERK.empno) CLERK,

count(distinct SALESMAN.empno) SALESMAN,

count(distinct ANALYST.empno) ANALYST from dept d

left join emp PRESIDENT

on (d.deptno=PRESIDENT.deptno and PRESIDENT.job='PRESIDENT') left join emp MANAGER

on (d.deptno=MANAGER.deptno and MANAGER.job='MANAGER')

left join emp CLERK

on (d.deptno=CLERK.deptno and CLERK.job='CLERK')

left join emp SALESMAN

on (d.deptno=SALESMAN.deptno and SALESMAN.job='SALESMAN') left join emp ANALYST

on (d.deptno=ANALYST.deptno and ANALYST.job='ANALYST')

group by d.deptno order by d.deptno;

分析:通过dept 表多次左外连接emp 表,比如说

select d.deptno, d.dname, e.empno, e.job from dept d

left join emp e on (d.deptno = e.deptno and e.job='CLERK');

结果如下:

oracle练习题及答案

WORD格式 1.找出各月倒数第3天受雇的所有员工 selectenamefromempwherelast_day(hiredate)-2=hiredate; 2.找出早于12年前受雇的员工 selectenamefromempwheremonths_between(sysdate,hiredate)>=144; 3.以首字母大写的方式显示所有员工的姓名 selectinitcap(ename)fromemp; 4.显示正好为5个字符的员工的姓名 selectenamefromempwherelength(ename)=5; 5.显示不带有“R”的员工姓名 selectenamefromempwhereinstr(ename,'R',1,1)=0; 6.显示所有员工姓名的前三个字符 selectsubstr(ename,1,3)fromemp; 7.显示所有员工的姓名,用“a”替换所有的“A” selectename,replace(ename,'A','a')fromemp; 8.显示满10年服务年限的员工的姓名和受雇日期 selectename,hiredatefromempwheremonths_between(sysdate,hiredate)>=120; 9.显示员工的详细资料,按姓名排序 select*fromemporderbyenamedesc; 10.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面selectename,hiredatefromemporderbyhiredate; 11.显示所有员工的姓名、工作和薪金,按照工作的降序排序,若工作相同则按薪金排序selectename,job,salfromemporderbyjobdesc,sal; 12.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份 相同则将最早年份的员工排在最前面 selectename,to_char(hiredate,'yyyy')h,to_char(hiredate,'mm')m fromemporderbym,h; 13.显示在一个月为30天的情况所有员工的日薪金,忽略余数 selecttrunc(sal/30)fromemp; 14.找出在(任何年份的)2月受聘的所有员工 selectenamefromempwhereto_char(hiredate,'mm')=2; 15.对于每个员工显示其加入公司的天数 selectename,sysdate-hiredatefromemp; 16.显示姓名字段的任何位置包含“A”的所有员工姓名 selectenamefromempwhereinstr(ename,'A',1,1)<>0; selectenamefromempwhereenamelike'%A%'; 专业资料整理

2019年oracle期末考试试题及答案

A.PGA B.日志缓冲区C.数据缓冲区D.共享池 2、()模式存储数据库中数据字典的表和视图。 A.DBA B.SCOTT C.SYSTEM D.SYS 3、在Oracle中创建用户时,若未提及DEFAULT TABLESPACE关键字,则Oracle就将() 表空间分配给用户作为默认表空间。 A.HR B.SCOTT C.SYSTEM D.SYS 4、()服务监听并按受来自客户端应用程序的连接请求。 A.OracleHOME_NAMETNSListener B.OracleServiceSID C.OracleHOME_NAMEAgent D.OracleHOME_NAMEHTTPServer 5、()函数通常用来计算累计排名、移动平均数和报表聚合等。 A.汇总B.分析C.分组D.单行 6、()SQL语句将为计算列SAL*12生成别名Annual Salary A.SELECT ename,sal*12 ‘Annual Salary’ FROM emp; B.SELECT ename,sal*12 “Annual Salary” FROM emp; C.SELECT ename,sal*12 AS Annual Salary FROM emp; D.SELECT ename,sal*12 AS INITCAP(“Annual Salary”) FROM emp; 7、锁用于提供( )。 A.改进的性能 B.数据的完整性和一致性 C.可用性和易于维护 D.用户安全 8、( )锁用于锁定表,允许其他用户查询表中的行和锁定表,但不允许插入、更新和删除 行。 A.行共享B.行排他C.共享D.排他 9、带有( )子句的SELECT语句可以在表的一行或多行上放置排他锁。 A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH 10、使用( )命令可以在已分区表的第一个分区之前添加新分区。 A.添加分区B.截断分区 C.拆分分区D.不能在第一个分区前添加分区 11、( )分区允许用户明确地控制无序行到分区的映射。 A.散列B.范围C.列表D.复合 12、可以使用()伪列来访问序列。 A.CURRVAL和NEXTVAL B.NEXTVAL和PREVAL C.CACHE和NOCACHE D.MAXVALUE和MINVALUE 13、带有错误的视图可使用()选项来创建。 A.FORCE B.WITH CHECK OPTION C.CREATE VIEW WITH ERROR D.CREATE ERROR VIEW

最新Oracle期末考试复习题2资料

复习题 一、填空题: 1. Oracle EnterpriseManager是一个基于 B/S的框架系统。 2.Oracle数据库的存储结构分为物理结构和逻辑结构。 3.在游标或者游标变量打开后还没有进行第一次提取时,%found属性为null。 4. 在oracle中已commit或rollback作为上一个事务的结束标志及下一个新事物开始的标志。 5. DML表示数据操作语言,主要的DML有SELECT,INSERT,UPDATE,DELETE. 6.索引的主要目标是提高访问的速度。 7.在Oracle database 10g 系统中,可以使用DBCA工具和CREATE DATEBASE命令两种方式创建数据库。 8. 命令Startup nomount只能启动数据库实例,但不能装载和打开数据库。 9.在输入URL进入Oracle Enterprice Manager Database Control 的时候,必须指出ip地址和端口 号。 10.在登录Oracle Enterprice Manager Database Control时,连接身份有两种选择,分别为normal 和sysdba。 二、选择题: 1.当Oracle服务器启动时,下列哪种文件不是必须装入内存的()。D A. 数据文件 B. 控制文件 C. 日志文件 D. 归档日志文件 2.在Oracle中,当用户要执行SELECT语句时,下列哪个进程从磁盘获得用户需要的数据()。B A.用户进程 B. 服务器进程 C. 日志写入进程(LGWR) D. 检查点进程(CKPT)3. 在Oracle数据库的逻辑结构中有以下组件:A 表空间;B 数据块;C 区;D段;这些组件从大到小依次是()。B A. A→B→C→D B. A→D→C→B C. A→C→B→D D. D→A→C→B 4. (B )可以从过程返回多个值。 A. 使用IN参数 B. 使用OUT参数 C. 使用指针 D. 不能 5.PL/SQL为内存耗尽时,预定义了(C )异常。 A. NO_DA TA_FOUND B. MEMORY_ERROR C. STORAGE_ERROR D. NO_MEMEORY_FOUND 6. 一下是同义词不具有的用途是(D )。 A. 简化SQL语句 B. 隐藏对象的名称和所有者 C. 提供对对象的公共访问 D. 显示对象的名称和所有者 7. 在Windows操作系统中,Oracle的( A )服务监听并接受来自客户端应用程序的连接请求。 A. OracleHOME_NAMETNSListener B. OracleServiceSID C. OracleHOME_NAMEAgent D. OracleHOME_NAMEHTTPServer 8. 在Oracle 中创建用户时,若未提及DEFAULT TABLESPACE 关键字,则Oracle 就将(B )表 空间分配给用户作为默认表空间。

Oracle 考试试题_带答案_

Oracle考试试题 一、选择(每题3分) 1) 当Oracle服务器启动时,下列哪种文件不是必须的()。 a) 数据文件 b) 控制文件 c) 日志文件 d) 归档日志文件 参考答案 D 2) 在Oracle中,当用户要执行SELECT语句时,下列哪个进程从磁盘获得用 户需要的数据()。 a) 用户进程 b) 服务器进程 c) 日志写入进程(LGWR) d) 检查点进程(CKPT) 参考答案 B 3) 在Oracle中,一个用户拥有的所有数据库对象统称为()。 a) 数据库 b) 模式 c) 表空间 d) 实例 参考答案 B 4) 在Oracle中,可用于提取日期时间类型特定部分(如年、月、日、时、分、 秒)的函数有()。 a) DATEPART b) EXTRACT c) TO_CHAR d) TRUNC 参考答案bc 5) 在Oracle中,有一个教师表teacher的结构如下: ID NUMBER(5) NAME V ARCHAR2(25) EMAIL V ARCHAR2(50) 下面哪个语句显示没有Email地址的教师姓名()。 a) SELECT name FROM teacher WHERE email = NULL;

b) SELECT name FROM teacher WHERE email <> NULL; c) SELECT name FROM teacher WHERE email IS NULL; d) SELECT name FROM teacher WHERE email IS NOT NULL; 参考答案 C 6) 在Oracle数据库的逻辑结构中有以下组件: A 表空间 B 数据块 C 区 D 段 这些组件从大到小依次是()。 a) A→B→C→D b) A→D→C→B c) A→C→B→D d) D→A→C→B 参考答案 b 7) 在Windows操作系统中,Oracle的()服务监听并接受来自客户端应用程 序的连接请求。 a) OracleHOME_NAMETNSListener b) OracleServiceSID c) OracleHOME_NAMEAgent d) OracleHOME_NAMEHTTPServer 参考答案 a 8) 在Windows操作系统中,Oracle的()服务是使用iSQL*Plus必须的。 a) OracleHOME_NAMETNSListener b) OracleServiceSID c) OracleHOME_NAMEAgent d) OracleHOME_NAMEHTTPServer 参考答案 B 9) 在 Oracle 中创建用户时,若未提及 DEFAULT TABLESPACE 关键字,则 Oracle 就将()表空间分配给用户作为默认表空间。。 a) USER b) SYSTEM c) SYS d) DEFAULT 参考答案 B 10) 在Oracle数据库中,()用户模式存储数据字典表和视图对象。 a) SYSTEM

Oracle数据库试题及答案

Oracle数据库试题 一、选择题 1、段是表空间中一种逻辑存储结构,以下( D )不是ORACLE数据库使用的段类型。(A)索引段(B)临时段(C)回滚段(D)代码段 2、 ORACLE数据库物理结构包括以下三种文件,以下不属于的是( A )。 ?(A)系统文件(B)日志文件(C)数据文件(D)控制文件 3、数据库中有两个用户scott和muuser,物资表wz是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( C ) (A)select*from scott.wz where wunit is null and rownum<5; (B)select*from myuser.wz where wunit = null and rownum<5; (C) select*from myuser.wz where wunit is null and rownum<6; (D)select*form scott.wz where wunit is null and rownum<6; ?4、若当前日期为’25-5月-06’,以下( D? )表达式能计算出5个月后那一天所在月份的最后一天的日期。 (A)NEXT_DAY(ADD_MONTHS(28-5月-06,5)) (B)NEXT_DAY(MONTHS_BETWEEN(28-5月-06,5)) (C)NEXT_DAY(MONTHS_BETWEEN(’28-5月-06’,5)) (D)NEXT_DAY(ADD_MONTHS(’28-5月-06’,5)) 5、下列叙述中正确的是_C_。 A、数据库是一个独立的系统,不需要操作系统的支持 B、数据库设计是指设计数据库管理系统 C、数据库技术的根本目标是要解决数据共享的问题 D、数据库系统中,数据的物理结构必须与逻辑结构一致 6、SQL语句中修改表结构的命令是 ???C?? ?。 A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE 7、数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系是__ A___。 A、DBS包括DB和DBMS B、DBMS包括DB和DBS C、DB包括DBS和DBMS D、DBS就是DB,也就是DBMS 8、要控制两个表中数据的完整性和一致性可以设置"参照完整性",要求这两个表_A___。 A、是同一个数据库中的两个表 B、不同数据库中的两个表 C、两个自由表 D、一个是数据库表另一个是自由表 9、在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过__B_ __。 A、候选键 B、主键 C、外键 D、超键 10、索引字段值不唯一,应该选择的索引类型为___ B__。 A、主索引 B、普通索引 C、候选索引 D、唯一索引 11、从数据库中删除表的命令是___C __。 A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE 12、 DELETE FROM S WHERE 年龄>60语句的功能是___B___。 A、从S表中彻底删除年龄大于60岁的记录 B、S表中年龄大于60岁的记录被加上删除标记

Oracle面试题笔试题及参考答案

一套Oracle面试题笔试题及参考答案 Oracle, 笔试, 面试 完成下列操作,写出相应的SQL语句 1.创建表空间neuspace,数据文件命名为neudata.dbf,存放在d:\data 目录下,文件大小为200MB,设为自动增长,增量5MB,文件最大为 500MB。(8分) 答:create tablespace neuspace datafile ‘d:\data\neudata.dbf’ size 200m auto extend on next 5m maxsize 500m; 2. 假设表空间neuspace已用尽500MB空间,现要求增加一个数据文件,存放在e:\appdata目录下,文件名为appneudata,大小为500MB,不自动增长。(5 分) 答:alter tablespace neuspace add datafile ‘e:\appdata\appneudata.dbf’ size 500m; 3. 以系统管理员身份登录,创建账号tom,设置tom的默认表空间为neuspace。为tom分配connect和resource系统角色,获取基本的系统权限。然后为tom 分配对用户scott的表emp的select权限和对SALARY, MGR属性的update权限。 (8分) 答:create user tom identified by jack default tablespace neuspace; Grant connect, resource to tom; Grant select, update(salary, mgr) on scott.emp to tom;

Oracle试题(含答案)

_C++_CSD/ESD1405 1. 把工资大于1000的first_name,salary 显示出来,按工资排序,工资相同按first_name降序的SQL语句是? A. select first_name,salary from s_emp order by salary,first_name B. select first_name,salary from s_emp order by salary,first_name asc C. select first_name,salary from s_emp order by salary desc,first_name D. select first_name,salary from s_emp order by salary,first_name desc 正确答案:D 2. 已知数据库中有员工表s_emp和部门表s_dept,具体字段如下: 员工表字段介绍: ID 员工编号 LAST_NAME 员工姓 FIRST_NAME 员工名 USERID 用户编号 START_DATE 入职日期 COMMENTS 员工备注信息 MANAGER_ID 员工的领导ID TITLE 员工的职位 DEPT_ID 部门的编号 SALARY 员工的月薪 COMMISSION_PCT 提成 部门表的字段介绍: ID 部门编号 NAME 部门名 REGION_ID 地区编号 注:以下所有数据库相关题目,均使用这两个表 把s_emp表中的每个人的全名和工资列出来的SQL语句是? A. select first_name|last_name ,salary from s_emp

oracle考试试题及答案

试题一 一、填空题(每小题4分,共20分) 1、数据库管理技术经历了人工管理、文件系统、数据库系统三个阶段 2、数据库三级数据结构是外模式、模式、内模式 3、Oracle数据库中,SGA由数据库缓冲区,重做日志缓冲区,共享池组成 4、在Oracle数据库中,完正性约束类型有Primay key约束。Foreign key约束,Unique约束,check约束,not need约束 5、PL/SQL中游标操作包括声明游标,打开游标,提取游标,关闭游标 二、正误判断题(每小题2分,共20分) 1、数据库中存储的基本对象是数据(T) 2、数据库系统的核心是DBMS(T) 3、关系操作的特点是集合操作(T) 4、关系代数中五种基本运算是并、差、选择、投影、连接(F) 5、Oracle进程就是服务器进程(F) 6、oraclet系统中SGA所有用户进程和服务器进程所共享(T) 7、oracle数据库系统中数据块的大小与操作系统有关(T) 8、oracle数据库系统中,启动数据库和第一步是启动一个数据库实例(T) 9、PL/SQL中游标的数据是可以改变的(F) 10、数据库概念模型主要用于数据库概念结构设计() 三、简答题(每小题7分,共35分) 1、何谓数据与程序的逻辑独立性和物理独立性? 2、试述关系代数中等值连接与自然连接的区别与联系? 3、何谓数据库,数据库设计一般分为哪些阶段? 4、简述Oracle逻辑数据库的组成?

5、试任举一例说明游标的使用方法? 五、设有雇员表emp(empno,ename,age,sal,tel,deptno), 其中:empno-----编号,name------姓名,age -------年齡,sal-----工资,tel-----电话 deptno-----部门号。 请按下列要求分别晨SQL*PLUS下编程。(每小题3分,共15分)?1、查询家有电话的职工信息。 ?2、查询工资在500至800元之间的雇员信息 ?3、按年龄递增顺序显示雇员编号、姓名、年龄、工资 ?4、求部门号为D_01的平均工资 ?5、查找部门号为D_01的40岁以上而工资在400元以下的雇员名单。 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; ? 试题一答案 一、填空题 1、人工管理、文件系统、数据库系统 2、外模式、模式、内模式 3、数据库缓冲区,重做日志缓冲区,共享池 4、Primay key约束。Foreign key约束,Unique约束,check约束,not need 约束 5、声明游标,打开游标,提取游标,关闭游标 二、正误判断题 1、T 2、T 3、T 4、F 5、F 6、T 7、T 8、T 9、F 三、(略) 五、 1、SQL>SELECT * FROM emp WHERE tel NOT NULL; 2、SQL>SELECT * FROM emp WHERE BETWEEN 500 AND 800; 3、SQL>SELECT empno,ename,age,sal FROM emp ORDER BY age ASC; 4、SQL>SELECT AVG(sal) FROM emp WHERE deptno='D_01'; 5、SQL>SELECT ename FROM emp WHERE deptno='D_01' AND age>40 AND Sal<400; 试题二

ORACLE数据库期末考试题目及答案

期末考试卷(卷) 课程名称:数据库考试方式:开卷()闭卷(√) 、本试卷共4 页,请查看试卷中是否有缺页。 2、考试结束后,考生不得将试卷、答题纸带出考场。 1、以下(a )内存区不属于SGA。 A.PGA B.日志缓冲区 C.数据缓冲区 D.共享池 2、d )模式存储数据库中数据字典的表和视图。 (A.DBA B.SCOTT C.SYSTEM D.SYS 3、Oracle 中创建用户时,在若未提及DEFAULT TABLESPACE 关键字,Oracle 就将 c )则(表空间分配给用户作为默认表空间。A.HR B.SCOTT C.SYSTEM D.SYS

4、a )服务监听并按受来自客户端应用程序的连接请求。(A.OracleHOME_NAMETNSListener B.OracleServiceSID C.OracleHOME_NAMEAgent D.OracleHOME_NAMEHTTPServer 5、b )函数通常用来计算累计排名、移动平均数和报表聚合等。(A.汇总B.分析C.分组D.单行 6、b)SQL 语句将为计算列SAL*12 生成别名Annual Salary (A.SELECT ename,sal*12 …Annual Salary? FROM emp; B.SELECT ename,sal*12 “Annual Salary” FROM emp; C.SELECT ename,sal*12 AS Annual Salary FROM emp; D.SELECT ename,sal*12 AS INITCAP(“Annual Salary”) FROM emp; 7、锁用于提供(b )。 A.改进的性能 B.数据的完整性和一致性 C.可用性和易于维护 D.用户安全 8、( c )锁用于锁定表,允许其他用户查询表中的行和锁定表,但不允许插入、更新和删除行。 A.行共享B.行排他C.共享D.排他 9、带有( b )子句的SELECT 语句可以在表的一行或多行上放置排他锁。 A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH

Oracle认证考试试题

T

The safer , easier way to help you pass any IT exams. Exam : 1Z0-053 Title : Version : Demo Oracle Database 11g: Administration II

1.You are not sure if Flashback Database is enabled. What database column and view can you query to see if the flashback logs are being created in the flash recovery area? A. Query the initialization parameter FLASHBACK_DATABASE in VJINSTANCE. B. Query the FLASHBACK_ENABLED column in VJDATABASE. C. Query the FLASHBACK column in VJDATABASE.. D. Query the FLASHBACK_ON column in VJDATABAS E. Answer: D 2.What dynamic performance view can you query to list the supported platforms for transportable tablespaces? A. V$TRANSPORTABLE_PLATFORM B. V$TRANSPORTABLE_TABLESPACE C. V$SUPPORTED_PLATFORMS D. V$DATABASE PLATFORM Answer: A 3.You issue the following command to enable block change tracking: SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING; However, you receive an error message, and the tracking file is not created. What is a possible reason for the error message? A. The parameter DB_RECOVERY_FILE_DEST is not set. B. You must use ALTER SYSTEM instead. ) C. Your database must be in the MOUNT state to create the block change tracking file. D. The parameter DB_CREATE_FILE_DEST is not set. Answer: D 4.You are restoring and recovering a database to a new host. What data dictionary view will you use to identify the names of the datafiles on the new database? A. DBA_DATAFILE B. VJTABLESPACE C. VJDATAFILE D. V$DATAFILE_COPY E. VJBACKUP DATAFILE Answer: C 5.Your flash recovery area becomes full when you are running an RMAN backup (and has not yet reached the value specified by DB_RECOVERY_FILE_DEST). It is the destination for archived redo log files and backups. What will happen to the database? (Choose the best answer.) A. If you have the flash recovery area set to autoextend, the backup will continue with no problem. B. The database will hang until you add more space to the flash recovery area. C. RMAN will delete obsolete backups from the flash recovery area to accommodate new backups. D. The RMAN backup will hang until you add more space to the flash recovery area. Answer: C 6.You want to ensure the recoverability of the recovery catalog itself. Which of the following steps should

oracle期末考试题及答案

1、以下()内存区不属于SGA。 A.PGA B.日志缓冲区 C.数据缓冲区 D.共享池 2、()模式存储数据库中数据字典的表和视图。 A.DBA B.SCOTT C.SYSTEM D.SYS 3、在Oracle中创建用户时,若未提及DEFAULT TABLESPACE关键字, 则Oracle就将()表空间分配给用户作为默认表空间。 A.HR B.SCOTT C.SYSTEM D.SYS 4、()服务监听并按受来自客户端应用程序的连接请求。 A.OracleHOME_NAMETNSListener B.OracleServiceSID C.OracleHOME_NAMEAgent D.OracleHOME_NAMEHTTPServer 5、()函数通常用来计算累计排名、移动平均数和报表聚合等。 A.汇总 B.分析 C.分组 D.单行 6、()SQL语句将为计算列SAL*12生成别名Annual Salary A.SELECT ename,sal*12 ‘Annual Salary’ FROM emp; B.SELECT ename,sal*12 “Annual Salary” FROM emp; C.SELECT ename,sal*12 AS Annual Salary FROM emp; D.SELECT ename,sal*12 AS INITCAP(“Annual Salary”) FROM emp; 7、锁用于提供( )。

A.改进的性能 B.数据的完整性和一致性 C.可用性和易于维护 D.用户安全 8、( )锁用于锁定表,允许其他用户查询表中的行和锁定表,但不 允许插入、更新和删除行。 A.行共享 B.行排他 C.共享 D.排他 9、带有( )子句的SELECT语句可以在表的一行或多行上放置排他锁。 A.FOR INSERT B.FOR UPDATE C.FOR DELETE D.FOR REFRESH 10、使用( )命令可以在已分区表的第一个分区之前添加新分区。 A.添加分区 B.截断分区 C.拆分分区 D.不能在第一个分区前添加分区 11、( )分区允许用户明确地控制无序行到分区的映射。 A.散列 B.范围 C.列表 D.复合 12、可以使用()伪列来访问序列。 A.CURRVAL和NEXTVAL B.NEXTVAL和PREVAL C.CACHE和NOCACHE D.MAXVALUE和MINVALUE 13、带有错误的视图可使用()选项来创建。 A.FORCE B.WITH CHECK OPTION

Oracle笔试题及答案

一、选择题(每题1分) 1.Oracle发出下列select语句: SQL> select e.empno, e.ename, d.loc 2 from emp e, dept d 3 where e.deptno = d.deptno 4 and substr(e.ename, 1, 1) = ‘S’; 下列哪个语句是Oracle数据库中可用的ANSI兼容等价语句? A.select empno, ename, loc from emp join dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’; B.select empno, ename, loc from emp, dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’; C.select empno, ename, loc from emp join dept where emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’; D.select empno, ename, loc from emp left join dept on emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’; 2.你要对操纵Oracle数据库中的数据。下列哪个选项表示Oracle中select语句的功能, 并且不需要使用子查询? A.可以用select语句改变Oracle中的数据 B.可以用select语句删除Oracle 中的数据 C.可以用select语句和另一个表的内容生成一个表 D.可以用select语句对表截断 3.Oracle数据库中发出一个查询。下列哪个选项不能查询对用户定义静态表达式执行数学 运算时的查询组件? A.列子句 B.表子句 C.DUAL表 D.where子句 4.你要操纵Oracle数据,下列哪个不是SQL命令? A.select * from dual; B.set define C.update emp set ename = 6543 where ename = ‘SMITHERS’; D.create table employees(empid varchar2(10) primary key); 5.你要在Oracle中定义SQL查询。下列哪个数据库对象不能直接从select语句中引用?A.表 B.序列 C.索引 D.视图 6.你要根据PRODUCT_NAME列从PROFITS表查询中过滤返回的数据。下列哪个子句包含相 应过滤条件的引用? A.select B.from C.where D.having 7.下列代码显示了PROFITS表输出的局部: PRODUCT_NAME PRODUCT_TYPE QTR_END_DATE PROFIT ------------ ------------ ------------ ------------- BARNEY DOLL TOY 31-MAR-2001 6575430.30 GAS GRILL APP 31-MAR-2001 1234023.88

Oracle数据库基础题库【含答案】

1、判断题,正确请写写"T",错误请写写"F", 1、oracle数据库系统中,启动数据库的第一步是启动一个数据库实 例。( T )2、Oracle服务器端的监听程序是驻留在服务器上的单独 进程,专门负责响应客户机的连接请求。( F) 3、oracle数据库中实例和数据库是一一对应的(非ORACLE并行服务, 非集群)。( T) 4、系统全局区SGA 是针对某一服务器进程而保留的内存区域,它是不 可以共享的。( F ) 5、数据库字典视图ALL_***视图只包含当前用户拥有的数据库对象信 息。( F ) 8、数据字典中的内容都被保存在SYSTEM表空间中。( T ) 9、HAVING后面的条件中可以有聚集函数,比如SUM(),AVG()等, WHERE 后面的条件中也可以有聚集函数。( F ) 10、"上海西北京" 可以通过like ‘%上海_’查出来。( F ) 11、表空间是oracle 最大的逻辑组成部分。Oracle数据库由一个或多 个表空间组成。一个表空间由一个或多个数据文件组成,但一个数据文 件只能属于一个表空间。( T ) 12、表空间分为永久表空间和临时表空间两种类型。( T ) 13、truncate是DDL操作,不能 rollback。( T ) 14、如果需要向表中插入一批已经存在的数据,可以在INSERT语句中使 用WHERE语句。( F ) 15、Oracle数据库中字符串和日期必须使用双引号标识。( F ) 16、Oracle数据库中字符串数据是区分大小写的。( T ) 17、Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特 殊操作时候保证操作能正常进行。( F ) 18、为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字 段列表的末尾。( T )  20、在连接操作中,如果左表和右表中不满足连接条件的数据都出现在 结果中,那么这种连接是全外连接。( T ) 21、自然连接是根据两个表中同名的列而进行连接的,当列不同名时, 自然连接将失去意义。( T ) 23、PL/SQL代码块声明区可有可无。( T ) 24、隐式游标与显式游标的不同在于显式游标仅仅访问一行,隐式的可 以访问多行。( F )

oracle 上机考试试题与答案

1、写一个pl/sql程序块:直接使用数据类型定义两个变量v_empno 和v_ename,从scott模式下的emp表中检索某个员工的编号empno 和姓名ename,存储到v_empno和v_ename,并输出此员工的编号和姓名。 set serveroutput on declare type merchandise is record( v_empno number(30), v_ename varchar2(30)); record_merchandise merchandise; begin select empno,ename into record_merchandise from emp where empno='7369';

dbms_output.put_line(record_merchandise.v_empno); dbms_output.put_line(record_merchandise.v_ename); end; 2、写一个pl/sql程序块:根据scott模式下的emp表中的部门编号deptno字段的值,为姓名为SCOTT的雇员修改工资;若他所在部门号为10,则工资加100;若部门号为20,则工资加300;否则工资加400。 set serveroutput on declare v_deptno emp.deptno%type; addsal emp.sal%type; sal number;

begin select deptno into v_deptno from emp where ename='SCOTT'; if v_deptno='10' then addsal:=100; elsif v_deptno='20' then addsal:=300; else addsal:=400; end if; update emp set sal=sal+addsal where ename='SCOTT'; dbms_output.put_line(sal); end; 3、写一个pl/sql程序块:定义一个游标类型type_cursor,然后使用type_cursor定义变量ref_cur;根据scott模式下的emp表和dept表,使用游标变量ref_cur检索员工姓名和工作信息,并输出员工姓名和工作信息;使用游标变量ref_cur检索部门编号和部门名称信息,并输出部门编号和部门名称信息。

Oracle期末考试试题及答案

Oracle期末考试试题及答案

考 生 信 息 栏 装 订 线 一、选择题:(本题共20个小题,每小题2分,共40分) 1当Oracle 服务器启动时,下列哪种文件不是必须的 ( ) 。 A. 数据文件 B. 控制文件 C. 日志文件 D. 归档日志文件 2. 在Oracle 中,一个用户拥有的所有数据库对象统称为 ( )。 A. 数据库 B. 模式 C. 表空间 D. 实例 3.在 Oracle 数据库的逻辑结构中有以下组件: 1. 表空间 2. 数据块 3. 区 4. 段 这些组件从大到小依次是( )。 A. 1→2→3→4 B.1→4→3→2 C.1→3→2→4 D. 4→1→3→2 4.下列哪个子句实现对一个结果集进行分组和汇总( )。 A.HAVING B.ORDER BY C.WHERE D.GROUP BY 5. 在Oracle 数据库中,( )用户模式存储数据字典表和视图对象。 A. SYS B. SYSTEM C. SCOTT D. SYSDBA 6.以下不属于命名的PL/SQL 块的是( )。 A .程序包 B .过程 C .游标 D .函数 7.在Oracle 中创建用户时,若未提及DEFAULT TABLESPACE 关键字,则Oracle 就将( )表空间分配给用户作为默认表空间。 A .HR B .SCOTT C .SYSTEM D .SYS

8.在Windows操作系统中,Oracle的( )服务是使用iSQL*Plus必须的。 A.OracleHOME_NAMETNSListener B. OracleServiceSID C. OracleHOME_NAMEAgent D. OracleHOME_NAMEHTTPServer 9.下列哪个语句可以在SQL*Plus 中直接调用一个过程( )。 A. RETURN B. CALL C. SET D. EXEC 10.如果服务器进程无法在数据缓冲区中找到空闲块,为添加从数据文件中读出的数据块,则系统会启动如下哪一个进程( ) A.CKPT B. DBWR C.LGWR D. SMON 11.下列哪一个锁模式不属于Oracle( )。 A.死锁 B.排他锁 C.行级共享锁 D.共享锁 12.有字符串数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其实际存储长度为( ) A. 10 4 B. 4 4 C. 10 10 D. 4 10 13.在Oracle中,当控制一个显式游标时,下面哪种命令包含INTO子句( )。 A. FETCH B. CLOSE C. OPEN D. CURSOR 14. ORACLE中,用来判断列值是否为空的操作符是( )。 A. ==NULL B. NULLIS C. AS NULL D. IS NULL 15.查询一个表的总记录数,可以采用( )统计函数。 A. AVG(*) B. SUM(*) C. COUNT(*) D. MAX(*) 16.以下的哪个命令可以将SQL 命令的运行结果保存到文件中( )。 A.SAVE B.SPOOL C.GET D.INPUT 17.为了去除结果集中重复的行,可在SELECT 语句中使用下列哪个关键字( ) 。 A.ALL B.DISTINCT C.SPOOL D.HAVING 18.关于模式的描述下列哪一项不正确( )。 A.表或索引等模式对象一定属于某一个模式 B.在Oracle 数据库中,模式与数据库用户是一一对应的 C.一个表可以属于多个模式 D.一个模式可以拥有多个表 19.下列SELECT 语句中,哪些子句可以包含子查询( )。 A.SELECT B.GROUP BY C.WHERE D.ORDER BY 20.在下列模式对象中,哪个对象不会占用实际的存储空间( )。

相关主题
文本预览
相关文档 最新文档