数据库面试题

数据库查询题

一、 第一题

有三张表:
学生表(student:studentId,studentName);
课程表(course:courseId,courseName);
选课表(studentcourse:studentId,courseId);

问题:统计出所有学生的选课数量

student:
在这里插入图片描述
course:
在这里插入图片描述
studentcourse:
在这里插入图片描述
SQL(MySQL):

SELECT s.*, IFNULL(cour.count,0) AS COUNT
FROM student s
LEFT JOIN (
SELECT studentId, COUNT(courseId) AS COUNT
FROM studentcourse ss
GROUP BY studentId) cour ON s.studentId = cour.studentId;

查询结果:
在这里插入图片描述
运用到的知识点(关键字):count, group by,left join on, ifnull

二、 第二题

1. 有四张表
  • 学生表Student
    • sid 学号,sname 学生姓名,sage 学生年龄,ssex 学生性别
  • 课程表Course
    • cid 课程编号,cname 课程名称,tid 教师编号
  • 成绩表SC
    • sid 学号,cid 课程编号,score 成绩
  • 教师表Teacher
    • tid 教师编号 tname 教师名字
1. 查询平均成绩大于60分的同学的学号和平均分

思路:

  1. 先根据学生分组查询平均成绩
  2. 然后筛选出大于60分的数据
SELECT sid, AVG(score)

FROM sc

GROUP BY sid

HAVING AVG(score) > 60;

使用到的知识点:分组group by,统计函数avg,分组统计函数having

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

思路:

  1. 对成绩表的课程数量和成绩通过sid进行计数和求和统计
  2. 学生表左关联上面结果表
SELECT s.sid, s.sname, b.count, b.score

FROM student s

LEFT JOIN (

SELECT sc.sid, COUNT(cid) 'count', SUM(score) 'score'

FROM sc

GROUP BY sid) b ON s.sid = b.sid;

使用到的知识点:聚合函数count、sum,左关联left join on,分组group by

3. 查询姓“李”的老师的个数
SELECT COUNT(tid)

FROM teacher

WHERE tname LIKE '李%';

使用到的知识点:count,like,%

4. 查询没有学过“叶平”老师课程的同学的学号、姓名

思路:

  1. 查找叶平老师的课程id
  2. 查询没有选择叶平老师课程的学号 course表
  3. 根据学号查询学生学号和姓名
SELECT

stu.sid

FROM

student stu

WHERE

stu.sid NOT IN (

SELECT

sc.sid

FROM

teacher t,

course c,

sc sc

WHERE

t.tid = c.tid AND c.cid = sc.cid AND t.tname = '叶平'

      );

欢迎有更好方法的程序猿们评论指教

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值