数据库SQL面试题
大学生春季运动会的数据库,保存了比赛信息的三个表如下:
运动员 sporter(运动员编号 sporterid,姓名name,性别 sex,所属系号 department),
项目 item(项目编号 itemid,名称 itemname,比赛地点 location), 成绩 grade(运动员编号 id,项目编号 itemid,积分 mark)。
用SQL语句完成在“体育馆”进行比赛的各项目名称及其冠军的姓名
SELECT
i.itemname, s.name
FROM
grade g,
(SELECT
itemid iid, MAX(mark) max
FROM
grade
WHERE
itemid IN (SELECT
itemid
FROM
item
WHERE
location = '体育馆')
GROUP BY itemid) temp,
item i,
sporter s
WHERE
g.itemid = temp.iid
AND g.mark = temp.max
AND temp.iid = i.itemid
AND s.sporterid = g.sporterid;
注:这道题需要注意:在使用group by的时候, select后面字段要么出现在group by当中要么包含在聚合函数里面, 常见的聚合函数有sum()、max()、min()、avg()、count()....
Mysql中表student_table(id,name,birth,sex),插入如下记录:
('1003' , NULL , '2002-05-20' , '男');
('1004' , '张三' , '2000-09-06' , '男');
('1005' , '李四' , '2001-12-01' , '女');
('1006' , NULL , '2001-12-02' , '女');
修改name字段为NULL的记录,是男生时设置name='男生姓名',是女生时设置name='女生姓名'
update student_table set name = ( case when sex = '男' then '男生姓名' when sex = '女' then '女生姓名' end) where name is null ;
注:这道题的知识点在于熟悉语法:case when .. then when ... then ... else ... end .其中case和end必不可少。
已知职员表employee(eno,ename,gender,birthday,salary),现有一张E表,表结构与职员表一致,要求将E表中没有在职员表中出现的女职员添加到职员表中
INSERT INTO employee(eno,ename,gender,birthday,salary)
SELECT eno,ename,gender,birthday,salsry
FROM E
WHERE E.gender='女' and NOT EXISTS(
SELECT * FROM employee
WHERE employee.eno=E.eno)
在MySQL中,现有评分表evaluate(包含班级编号cid和分数point字段),有班级表grade(包含班级编号cid等字段), 查询evaluate 表中有没有班级均分大于等于80分的,如果存在,则查询显示grade表按cid由大到小排名的前五行记录
SELECT * FROM grade
WHERE EXISTS (
SELECT cid,AVG(point) AS avg
FROM evaluate GROUP BY cid
HAVING avg>=80)
ORDER BY grade.cid DESC LIMIT 5 ;
注:这道题的知识点优先顺序必须是from-->where-->group by -->having --- >order by --> select,这里需要注意的是聚合函数和where一起使用,会出现错误, 一般都会用having替代
Mysql中表student_table(id,name,birth,sex),score_table(stu_id,subject_name,score),查询多个学科的总分最高的学生记录明细以及总分
select t1.*, sco from student_table inner join (select stu_id, sum(score) as sco from score_table group by stu_id order by sco desc limit 1) as score_T on student_table.id = score_T.stu_id;
这道题的知识点:有关MYSQL连接逻辑均在图内