今天一个测试的朋友去面试,考察了她数据库查询的一些语法问题,但是一些细节她没有考虑进去被刷下了。果然行业标准提高了啊。
贴一下笔试题目。
–1.学生表
Student(SId,Sname,Sage,Ssex)
–SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
–2.课程表
Course(CId,Cname,TId)
–CId 课程编号,Cname 课程名称
–3.成绩表
SC(SId,CId,score)
–SId 学生编号,CId 课程编号,score 分数
完成如下查询:
① 查询即选了课程编号A又选了课程编号B的学生信息
② 查询所有学生的选课数量和总成绩
③ 查询课程编号A成绩前十的学生信息和对应的分数
④ 查询选课热度前三的课程信息
⑤ 查询每个学生的选课信息
这题目大概大家都不陌生,但是说到查询前多少名时很多人第一反应就是用 top,并没有考虑不同数据库是不一样的而且并列排名也往往会忽略。
就此 ,我贴一下我的答案,写的不好,希望多交流。
- 第1题
select * from student where sid in (
SELECT sid from sc WHERE cid in (A,B)
)
- 第2题
Select sum(score),count(cid),s.sid ,sname from student s left join sc on s.sid = sc.sid group by s.sid ,sname
- 第3题
-- Orcal serverSql 用 top 10
-- Mysql
SELECT * from (
SELECT sid,cid, Score,
@rank:= if(@pre=score, @Rank+0, @Rank+1) as Rank,
@pre:= score
FROM sc ,
(SELECT @rank:=0, @pre:= NULL) r
where cid = 2
ORDER BY score desc ) a LEFT JOIN student s on a.sid = s.sid WHERE rank <= 10;
- 第4题
-- Orcal server sql 用 top
-- Mysql
select * from (
SELECT cid, count(cid) c_cid from sc GROUP BY cid
) a LEFT JOIN course c on a.cid = c.cid ORDER BY c_cid desc LIMIT 10
- 第5题
SELECT * from sc , course , student WHERE sc.sid= student.sid and sc.Cid=course.cid ORDER BY sc.sid