图解SQL面试题:经典50题

如题所述

第1个回答  2024-04-02


SQL面试题解析:经典50题实战演练



    SQL基础挑战: 如何通过查询找到所有在1990年出生的学生名单?SELECT * FROM student WHERE YEAR(出生年月) = 1990
    数据透视与排序: 怎样获取前两名成绩记录,使用分组、排序与聚合函数?SELECT 学号, 成绩, ROW_NUMBER() OVER(PARTITION BY 课程号 ORDER BY 成绩 DESC) as 排名 FROM score WHERE 排名 <= 2
    时间轴查询: 查询学生精确到月的年龄,公式:`TIMESTAMPDIFF(MONTH, 出生年月, CURRENT_DATE()) / 12`
    筛选特殊时刻: 本月过生日的学生,条件:`SELECT * FROM student WHERE MONTH(出生年月) = MONTH(CURRENT_DATE())`
    多表查询示例: 汇总学号、姓名、选课数和总成绩,要求:SELECT s.学号, s.姓名, COUNT(c.课程号), SUM(s.成绩) FROM student s JOIN score sc ON s.学号 = sc.学号 JOIN course c ON sc.课程号 = c.课程号 GROUP BY s.学号

进阶技巧:



    成绩筛选与分析: 求平均成绩大于85的学生列表,条件:`SELECT 学号, AVG(b.成绩) FROM student s JOIN score b ON s.学号 = b.学号 GROUP BY s.学号 HAVING AVG(b.成绩) > 85`
    数据挖掘: 学生选课详情,包括课程名和教师名:SELECT a.学号, s.姓名, c.课程名称, t.教师姓名 FROM student s JOIN score sc ON s.学号 = sc.学号 JOIN course c ON sc.课程号 = c.课程号 JOIN teacher t ON c.教师号 = t.教师号
    条件与分组: 课程及格(成绩>=60)和不及格(成绩<60)人数统计:SELECT 课程号, SUM(CASE WHEN 成绩 >= 60 THEN 1 ELSE 0 END) as 及格人数, COUNT(*) as 总人数 FROM score GROUP BY 课程号

特别关注:



    课程0003及格成绩查询: SELECT 学号, 姓名 FROM student WHERE 学号 IN (SELECT 学号 FROM score WHERE 课程号 = '0003' AND 成绩 >= 80)
    成绩分布分析: 学生按成绩分段统计,例如成绩在60-70分之间的学生:SELECT COUNT(*) FROM score WHERE 成绩 BETWEEN 60 AND 70

复杂查询示例:



    学生与教师关联: 如何找出孟扎扎老师的所有课程及其学生?SELECT s.学号, s.姓名, a.学号, b.课程号, c.教师号, c.教师姓名 FROM student s JOIN score a ON s.学号 = a.学号 JOIN course b ON a.课程号 = b.课程号 JOIN teacher c ON b.教师号 = c.教师号 WHERE c.教师姓名 = '孟扎扎'
    排除法查询: 不学孟扎扎老师课程的学生列表:SELECT 姓名, 学号 FROM student WHERE 学号 NOT IN (SELECT 学号 FROM score WHERE 教师号 = (SELECT 教师号 FROM teacher WHERE 教师姓名 = '孟扎扎'))

通过以上实战题目,深入理解SQL查询的逻辑和技巧,为面试做好准备。


相似回答