您的位置:首页 > 数据库 > Oracle

Oracle sql面试题二

2015-11-13 09:41 477 查看
Student(S#,Sname,Sage,Ssex) 学生表

Course(C#,Cname,T#) 课程表

SC(S#,C#,score) 成绩表

Teacher(T#,Tname) 教师表

问题

1、查询“001”课程比“002”课程成绩高的所有学生的学号

select a.S#

from (select s#,score from SC where C#='001') a,

(select s#,score from SC where C#='002') b

where a.score>b.score and a.s#=b.s#;

2、查询平均成绩大于60分的同学的学号和平均成绩

select S#,avg(score)

from sc

group by S# having avg(score) >60;

3、查询所有

同学的学号、姓名、选课数、总成绩

select Student.S#,Student.Sname,count(SC.C#),sum(score)

from Student left Outer

join SC on Student.S#=SC.S#

group by Student.S#,Sname

4、查询姓“李”的老师的个数

select count(distinct(Tname))

from Teacher

where Tname like '李%';

5、查询没学过“叶平”老师课的同学的学号、姓名

select Student.S#,Student.Sname

from Student

where S# not in (select distinct( SC.S#) from SC,Course,Teacher where

SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');

6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2

where SC_2.S#=SC.S# and SC_2.C#='002');

7、查询学过“叶平”老师所教的所有课的同学的学号、姓名

select S#,Sname

from Student

where S# in

(select S#

from SC ,Course ,Teacher

where SC.C#=Course.C# and Teacher.T#=Course.T# and

Teacher.Tname='叶平' group by S# having count(SC.C#)=(select

count(C#) from Course,Teacher where Teacher.T#=Course.T# and

Tname='叶平'));

8、查询所有课程成绩小于60分的同学的学号、姓名

select S#,Sname

from Student

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and

score>60);

9、查询没有学全所有课的同学的学号、姓名

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S#

group by Student.S#,Student.Sname having count(C#) <(select count(C#)

from Course);

10、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名

select S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

11、删除学习“叶平”老师课的SC表记录

Delect SC

from course ,Teacher

where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';

12、查询各科成绩最高和最低的分以如下形式显示课程ID最高分最低



SELECT L.C# 课程ID,L.score 最高分,R.score 最低分

FROM SC L ,SC R

WHERE L.C# = R.C#

and

L.score = (SELECT MAX(IL.score)

FROM SC IL,Student IM

WHERE IL.C# = L.C# and IM.S#=IL.S#

GROUP BY IL.C#)

and

R.Score = (SELECT MIN(IR.score)

FROM SC IR

WHERE IR.C# = R.C#

GROUP BY IR.C# );

13

、查询学生平均成绩及其名次

SELECT 1+(SELECT COUNT( distinct 平均成绩)

FROM (SELECT S#,AVG(score) 平均成绩

FROM SC

GROUP BY S# ) T1

WHERE 平均成绩 > T2.平均成绩) 名次, S# 学生学号,平均成绩

FROM (SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# ) T2

ORDER BY 平均成绩 desc;

14、查询各科成绩前三名的记录:(不考虑成绩并列情况)

SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC)

ORDER BY t1.C#;

15、查询每门功成绩最好的前两名

SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数

FROM SC t1

WHERE score IN (SELECT TOP 2 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC )

ORDER BY t1.C#;

在面试过程中多次碰到一道SQL查询的题目查询A(ID,Name)表中第31至

40条记录ID作为主键可能是不是连续增长的列完整的查询语句如下

方法一

select top 10 *

from A

where ID >(select max(ID) from (select top 30 ID from A order by

ID )

T

) order by ID

方法二

select top 10 *

from A

where ID not In (select top 30 ID from A order by ID)

order by ID
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: