Oracle常见的面试题四(10级学员 庞丽整理)

转载 2012年03月22日 20:54:48

Oracle常见的面试题:

题目:现有STUDENT(学生),COURSE(课程),SC(成绩)表,完成以下需求。(建表语句在emp.sql中,综合考察)

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

select s.sid,s.name from student s inner join sc on(s.sid=sc.sid)inner join course c on

(c.cid=sc.cid) where c.name='web';

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

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

         select s.name,s.dept from student s inner join sc on (s.sid=sc.sid) where sc.cid=2;

3)查询不选修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的学员。方法二效率较高。

4)求出所有学生的选修的所有课程

select * from student s inner join sc on s.sid=sc.sid inner join course c on sc.cid=c.cid order by s.sid;

分析:步骤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 s.name,s.dept from student s where sid in (select sid from sc group by sid having(count(*) = (select count(*) from course)));

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

         select * from student where sid in(select sid from(select sid,count(*) from (select s.* from student s inner join sc on s.sid=sc.sid inner join course c on sc.cid=c.cid order by s.sid) group by sid having count(*)>3 order by sid));

6)找出没有选修过TeacherLI 讲授课程的所有学生姓名

         select s.name 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');

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

         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;

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

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

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

Select sc.sid,svg(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 sid from sc where score<60 group by sid having(count(*)>=2))a

                            Where sc.sid=a.sid group by sc.sid;

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

         select s.name 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

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

         select s.sid,s.name,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表连接查询姓名。

oracle面试题整理二(10级学员 乔宇整理)

Oracle面试题整理二(10级学员 乔宇整理) 1.查询工资最高的3 名员工信息 select * from (select * from emp order by sal desc) ...
  • zhenzheni
  • zhenzheni
  • 2017年08月07日 17:48
  • 248

Oracle面试题及答案整理

1、表:table1(FId,Fclass,Fscore),用最高效最简单的SQL列出各班成绩最高的列表,显示班级,成绩两个字段。 select fclass,max(fscore) from ...
  • merryxuan
  • merryxuan
  • 2016年09月23日 09:54
  • 925

oracle常见面试题

一、基础概念 1. 列举几种表连接方式 Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全) Or hash join/merge join/nest loop(cluster...
  • jammas0502
  • jammas0502
  • 2015年04月21日 14:54
  • 3817

Oracle面试题1

1、每一个用户有姓名、别名、性别、联系方式,但是联系方式有多种: 公司电话、手机、固定电话, 问:你怎样设计表结构  **使用powerdesigner工具  **引用设计范式1,2,...
  • t0404
  • t0404
  • 2016年07月12日 22:50
  • 4236

oracle面试题及其答案

一、基础概念 1. 列举几种表连接方式 Answer:等连接(内连接)、非等连接、自连接、外连接(左、右、全) Or hash join/merge join/nest loop(cluster...
  • maguanghui_2012
  • maguanghui_2012
  • 2015年06月25日 20:41
  • 660

Oracle面试题(基础篇)

1. Oracle跟SQL Server 2005的区别?  宏观上:  1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由...
  • alinshen
  • alinshen
  • 2017年07月14日 07:21
  • 1111

Oracle优化面试题

Oracle SQL性能优化 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 dr...
  • t0404
  • t0404
  • 2016年07月12日 22:51
  • 6937

【面试】【Oracle常见问题总结】【01】

系统全局区(SGA):是ORACLE为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。 SGA主要包括: 1. 共享池(shared pool) :用来存...
  • DERRANTCM
  • DERRANTCM
  • 2016年05月31日 06:55
  • 2855

JAVASE常见面试题

整理javase常见的面试题 int与integer的区别?==与equals()的区别?opp(面向对象)的三大特征?java是如何体现的? java中的引用与c语言中的指正有什么不同?String...
  • Joakim_Zhou
  • Joakim_Zhou
  • 2015年01月26日 15:52
  • 1086

常见面试题整理--数据库篇(每位开发者必备)

常见面试题整理--数据库篇(每位开发者必备) 转载自:https://zhuanlan.zhihu.com/p/23713529        知乎专栏 继续前面有关于的Pytho...
  • weinierzui
  • weinierzui
  • 2017年05月01日 11:36
  • 6457
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle常见的面试题四(10级学员 庞丽整理)
举报原因:
原因补充:

(最多只允许输入30个字)