数据库SQL查询习题

目录

设教学数据库Education有三个关系:

查询问题

1、查所年龄在20至23岁之间的学生姓名、系别及年龄。

2、查既不是计算机系、数学系、又不是信息系的学生姓名、性别

3、查所有姓“刘”的学生的姓名、学号和性别。

4、查缺考的学生的学号和课程号。

5、查询选修了3号课程的学生的学号和成绩,其结果按分数的降序排列。

6、查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。

7、查询学生总人数。

8、检索选修课程号为2或4的学生学号;

9、检索至少选修课程号为C2和C4的学生学号;

10、检索不学C2课的学生姓名和年龄;

11、检索学习全部课程的学生姓名;

12、查询所学课程包含学生S3所学课程的学生学号。

13、计算选修了C1课程的学生平均成绩。

14、查询各个课程号与相应的选课人数。

15、查询计算机系选修了3门以上课程的学生的学号。

16、求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。

17、查询选修了C2课程且成绩在90分以上的所有学生。

18、统计每一年龄选修课程的学生人数。

19、查询选修课程名为“数据库”的学生学号和姓名。


设教学数据库Education有三个关系:

学生关系S(Sno,Sname, Ssex,Sage,Sdept);

学习关系SC(Sno,Cno,Grade);

课程关系C(Cno,Cname,Cdept,Tname)

查询问题

1、查所年龄在20至23岁之间的学生姓名、系别及年龄。

select Sname,Sdept,Sage
from S
where Sage between 20 and 23

2、查既不是计算机系、数学系、又不是信息系的学生姓名、性别

select Sname,Ssex
From S
Where Sdept not in('CS','MA','IS')

3、查所有姓“刘”的学生的姓名、学号和性别。

select Sname,Sno,Sex
from S
where Sname like "刘%"

4、查缺考的学生的学号和课程号。

select Sno,Cno
from SC
where Grade is null

5、查询选修了3号课程的学生的学号和成绩,其结果按分数的降序排列。

select Sno,Grade
from SC
where Cno='3'
order by Grade desc

6、查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。

select *
from S
order by Sdept asc,Sage desc

7、查询学生总人数。

select count(*)
from S

8、检索选修课程号为2或4的学生学号;

select Sno
from SC
where Cno='2' or Cno='4'

9、检索至少选修课程号为C2和C4的学生学号;

select Sno
from SC
where Cno='C2' and Sno in
  (select Sno
  from SC
  where Cno='C4')

10、检索不学C2课的学生姓名和年龄;

select Sno,Sage
from S
where Sno not in
(select Sno from SC where Cno='C2')

11、检索学习全部课程的学生姓名;

//Exists子句只返回true值,Not Exists只返回false值。

select Sname
from S
where not exists
    (select * from C 
     where not exists
        (select * from SC 
         where S.Sno=SC.Sno and SC.Cno=C.Cno))

//查找学习了所有课程的学生,即是在C中不存在一门课程没有学。

12、查询所学课程包含学生S3所学课程的学生学号。

select Sno
from SC 
where Cno in
  (select Cno
  from SC
  where Sno='S3')

13、计算选修了C1课程的学生平均成绩。

select avg(Grade)
from SC
where Cno='C1'

14、查询各个课程号与相应的选课人数。

select Cno,count(Sno)
from Sc
group by Cno

15、查询计算机系选修了3门以上课程的学生的学号。

select Sno
from S,SC
where Sdept='CS' and S.Sno=SC.Sno
group by Sno
having count(*)>3

16、求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。

select Sage,count(Sno)
from S
group by age
having count(*)>50
order by count(*) asc,Sage desc

17、查询选修了C2课程且成绩在90分以上的所有学生。

select Sno
from SC
where Cno='C2' and Grade>90

18、统计每一年龄选修课程的学生人数。

select Sage,count(distinct S.Sno)
from S,SC
where S.Sno=SC.Sno
group by age

19、查询选修课程名为“数据库”的学生学号和姓名。

//嵌套查询

select Sno,Sname
from S
where Sno in
  (select Sno
  from SC
  where Cno in
         (select Cno
          from C
          where Cname="数据库"));


//连接查询

select Sno,Sname
from S join SC on S.Sno=SC.Sno 
join C on SC.Cno=C.Cno and C.Cname="数据库";

select Sno,Sname
from S,SC,C
where S.Sno=SC.Sno and SC.Cno=C.Cno and C.Cname="数据库";

  • 11
    点赞
  • 143
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木木子v

你的鼓励是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值