失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 经典SQL语句面试题

经典SQL语句面试题

时间:2019-04-18 03:19:48

相关推荐

经典SQL语句面试题

以学生表查询来看下常见sql面试题

Student(Sno,Sname,Sage,Ssex) 学生表

Course(Cno,Cname,Tno) 课程表

SC(Sno,Cno,score) 成绩表

Teacher(Tno,Tname) 教师表

问题:

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

select a.Sno

from (select Sno,score from SC where Cno=’001′) a,

(select Sno,score from SC where Cno=’002′) b

where a.score>b.score and a.Sno=b.Sno;

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

select Sno,avg(score)

from sc

group by Sno having avg(score) >60;

3、查询所有同学的学号、姓名、选课数、总成绩;

select Student.Sno,Student.Sname,count(o),sum(score)

from Student left Outer join SC on Student.Sno=SC.Sno

group by Student.Sno,Sname

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

select count(distinct(Tname))

from Teacher

where Tname like ‘李%’;

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

select Student.Sno,Student.Sname

from Student

where Sno not in (select distinct( SC.Sno) from SC,Course,Teacher where o=o and Teacher.Tno=Course.Tno and Teacher.Tname=’叶平’);

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

select Student.Sno,Student.Sname

from Student,SC

where Student.Sno=SC.Sno and o=’001′and exists( Select * from SC as SC_2 where SC_2.Sno=SC.Sno and o=’002′);

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

select Sno,Sname

from Student

where Sno in

(select Sno

from SC ,Course ,Teacher

where o=o and Teacher.Tno=Course.Tno and Teacher.Tname=’叶平’ group by Sno having count(o)=(select count(Cno) from Course,Teacher where Teacher.Tno=Course.Tno and Tname=’叶平’));

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

select Sno,Sname

from Student

where Sno not in (select Student.Sno from Student,SC where S.Sno=SC.Sno and score>60);

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

select Student.Sno,Student.Sname

from Student,SC

where Student.Sno=SC.Sno

group by Student.Sno,Student.Sname having count(Cno) <(select count(Cno) from Course);

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

select Sno,Sname

from Student,SC

where Student.Sno=SC.Sno and Cno in (select Cno from SC where Sno=‘1001’);

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

Delect SC

from course ,Teacher

where o=o and Course.Tno= Teacher.Tno and Tname=‘叶平’;

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

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

FROM SC L ,SC R

WHERE o = o

and

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

FROM SC IL,Student IM

WHERE o = o and IM.Sno=IL.Sno

GROUP BY o)

and

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

FROM SC IR

WHERE o = o

GROUP BY o );

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

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

FROM (SELECT Sno,AVG(score) 平均成绩

FROM SC

GROUP BY Sno ) T1

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

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

ORDER BY 平均成绩 desc;

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

SELECT t1.Sno as 学生ID,o as 课程ID,Score as 分数

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE o= Cno

ORDER BY score DESC)

ORDER BY o;

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

SELECT t1.Sno as 学生ID,o as 课程ID,Score as 分数

FROM SC t1

WHERE score IN (SELECT TOP 2 score

FROM SC

WHERE o= Cno

ORDER BY score DESC )

ORDER BY o;

补充:

已经知道原表

year salary

——————

2000 1000

2001 2000

2002 3000

4000

解:

select b.year,sum(a.salary)

from salary a,salary b

where a.year<=b.year

group by b.year

order by b.year;

在面试过程中多次碰到一道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

如果觉得《经典SQL语句面试题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。