java面试题 sql_Java高频面试题160道答案-第11篇(SQL查询篇)

现有学生信息表s(sNo,sName) 字段含义:学号,姓名

课程表c(cId,cName,teacher) 字段含义:课程号,课程名称,教师名

学生选修课程表sc(sNo,cId,score) 字段含义:学号,课程号,课程成绩。

根据以上表格,进行以下数据查询:

111,查询课程1的成绩比课程2的成绩高的所有学生的学号

答:

select sc1.sNo from sc sc1,sc sc2 where sc1.sNo=sc2.sNo and sc1.cid=1 and sc2.cid=2 and sc1.score>sc2.score

112,查询平均成绩大于60分的同学的学号和平均成绩

答:

select sNo,avg(score) from sc group by sNo having avg(score)>60

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

答:

0944cda7f869ec622c3125ae7f79f480.png

114,查询姓“张”的老师的个数

答:

select count(teacher) from c where teacher like '张%'

115,查询没学过“张三”老师课的同学的学号、姓名

答:思路:先根据张三教师的姓名找到该教师教的课程号,然后再从sc中取出选修过这门课的学生号。最后把这些学生排除出去就得到想要的结果

答:

34e161e0a024e9d3e283f478e9bdd043.png

116,查询同时学过课程1和课程2的同学的学号、姓名

答 :思路:对学号进行分组,那些选修了课程1或2的并且数量正好为2个的必定为同时选修了课程1和2的学生。把他们的学号取出来,从学生表中取出需要的字段即可

71a6b36cf7513a20cae176d3cafc9d73.png

117,查询学过“李四”老师所教所有课程的所有同学的学号、姓名

答:思路:先根据教师名字找出该教师所教的全部课程编号

692b4a67b89ab93aa5defdd4c5a8cd04.png

然后根据学号进行分组,找出选修课程号在上面所找出的课程号里,并且数量与课程数量相同的学生学号(思路与上一题同)。再根据这些学号取出学生信息

0e7b6a3946737129d3be8e30bb1ee3d3.png

118,查询课程编号1的成绩比课程编号2的成绩高的所有同学的学号、姓名

答:这一题与第一题一样的。主要是先要确定该学生同时选修了课程1和课程2,然后再比较两门课的成绩。使用了自连接。

5408ee914a8d389af09fb38900b39467.png

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

答:这一题的关键在于要找出那些选修了课程,但所有选修的课程都小于60分的学生。只要有一门及格了就排除在外。可以换个思路,先找出那些有分数大于等于60分的学生号。这些都是不符合要求的,把他们排除在外,剩下的就一定是考试全部不及格的那些人。

39fc389c06bb6782b5f8b17256e8a78d.png

120,查询至少有一门课程与学号为1的同学所学课程相同的同学的学号和姓名

答:先找出学号为1的同学选修的课程号,然后找其他同学选修的课程号在1号同学选修的课程号内就可以了。最后别忘了把1号同学自己排除出去。

8e914928845e1e85a1bae6788a5f82c0.png

fc5cfd7508c016d5062cc63d24625254.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值