数据库原理:SQL查询语句练习及解析,加深理解(二)

另一篇传送门:(10条消息) 数据库原理:SQL查询语句练习及解析,加深理解(一)_小许要加油啊~的博客-CSDN博客

一、题目

  • 设有如下三个关系:

关系   学号、姓名、年龄、性别

关系     学号、课程号、成绩

关系   课程号、课程名、任课老师

  • 问:

  1. 统计所有学生各自选修的课程门数。

  1. 求选修课程号为C4课程的女学生的平均年龄

  1. 求Liu老师所授课程的每门课的平均成绩

  1. 统计每门课程的学生选修人数

  1. 检索学号比Wang同学大,而年龄比他小的同学姓名

  1. 在表SC中检索成绩为空值的学生学号和课程号。

  1. 检索姓名以L打头的所有学生的姓名和年龄。

  1. 求年龄大于女同学平均年龄的男学生姓名和年龄


二、答案和解析

  1. 统计所有学生各自选修的课程门数

思路:按学号分组,统计每一个学生选课的书目

SELECT COUNT(*)
FROM SC
GROUP BY Sno
  1. 求选修课程号为C4课程的女学生的平均年龄

连接查询:

SELECT AVG(Age)
FROM S,SC
WHERE S.Sno=SC.Sno AND Cno='C4' AND Sex='WOMAN'

嵌套查询:

SELECT AVG(Age)
FROM S
WHERE Sex='WOMAN' AND Sno IN
       (SELECT Sno
       (FROM SC
        WHERE Cno='C4'))
  1. 求Liu老师所授课程的每门课的平均成绩

思路:由于是求平均成绩,还需要表示出对应的课程号,所以select语句中有Cno和AVG(Grade)。最后的分组是必要的,把同一节课的成绩分在一组再去求平均才有意义,否则无意义。

SELECT Cno,AVG(Grade)
FROM SC,C
WHERE SC.Cno=C.cno AND Teacher='LIU'
GROUP BY C.Cno
  1. 统计每门课程的学生选修人数

SELECT COUNT(Sno)
FROM SC
GROUP BY Cno
  1. 检索学号比Wang同学大,而年龄比他小的同学姓名

思路:需要涉及两次S表,故将其分别命名为X和Y,在WHERE语句中需要区分两个表的属性。

SELECT Sname
FROM S X,S Y
WHERE Y.Sname='WANG' AND X.Sno>Y.sno AND X.Age<Y.Age
  1. 在表SC中检索成绩为空值的学生学号和课程号

SELECT Sno,Cno
FROM SC
WHERE Grade IS NULL
  1. 检索姓名以L打头的所有学生的姓名和年龄。

SELECT Sname,Age
FROM S
WHERE Sname LIKE 'L%'
  1. 求年龄大于女同学平均年龄的男学生姓名和年龄

思路:需要涉及两次S表,故将其分别命名为X和Y,在WHERE语句中需要区分两个表的属性。

SELECT Sname,Age
FROM S X
WHERE X.Sex='MAN' AND X.Age >
       (SELECT AVG(Y.Age)
       (FROM S Y
        WHERE Y.Sex='WOMAN'))
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小许要加油啊~

是对我最大的鼓励以及肯定,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值