数据库原理实验-数据库高级查询


接着上一部分数据库基本查询二来。
这一次实验的查询在逻辑上加深了一些,难度更大

题目:

  1. 将素材中的数据库附加到SQL SERVER中
    下面是附加操作:
    在这里插入图片描述
    在这里插入图片描述

表结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 新建查询,查询那些同学选修了3个以上的课程,显示学号和选修门数
select 学号,count(*) 选修门数
from 学生成绩
group by 学号
having count(*)>3
  1. 新建查询,查询每个学生的成绩在80分以上的各有多少门,显示姓名和门数
select 姓名,count(*) 门数
from 成绩表
where 成绩>80
group by 学号
  1. 新建查询,查询所有课程的平均成绩比王永林平均分高的学生的学生名和平均成绩
select 学生名,avg(成绩)
from 学生成绩
group by 学号
having avg(成绩)>(
	select avg(成绩)
	from 学生成绩
	where 姓名='王永林'
)
  1. 新建查询,查询教师或学生的学号(或教师编号)、姓名、性别、政治面貌,第一个字段以编号显示
--联合两表的查询结果用union字段
select 教师编号 编号,姓名,性别,政治面貌
from 教师信息
union
select 学号 编号,姓名,性别,政治面貌
from 学生信息
  1. 新建查询,查询入学分数在前25%同学选修哪些课程,显示姓名、课程名和成绩,
select 姓名,课程号,成绩
from 学生成绩
where 姓名 in (
	select 25 percent 姓名
	from 学生信息
	order by 入学成绩 desc
)
  1. 新建查询,查询大于入学分数平均值的男生的人数,
select count(*) 人数
from 学生信息
where 性别='男' and 入学分数>(
	select avg(入学分数)
	from 学生信息
)
  1. 新建查询,查询既有先修课,同时自己又是其他课的先修课的课程名,
--这里使用自连接
select a1.课程名 课程名
from 课程信息 a1 join 课程信息 a2 on a1.课程名=a2.先修课--同时自己又是其他先修课的课程名
where a1.先修课 is not null --既有先修课

select 先修课 课程名
from 课程信息
where 先修课 in(
	select 课程名
	from 课程信息
	where 先修课 is not null
)
  1. 新建查询,查询入学分数前3同学选修的所有课程中学生的学号、姓名和性别==(双重嵌套)==
select 学号,性别,姓名
from 学生成绩 join 学生信息 on 学生成绩.学号=学生信息.学号
where 课程号 in (
	select 课程号
	from 学生成绩 
	where 学号 in (
		select top 3 学号
		from 学生信息
		order by 入学分数 desc
	)
)

  1. 新建查询,查询教师中工龄超过18年(包括)的未婚教师的姓名、工龄、结婚状态(婚否的别名)和院系名称
select 姓名,(year(getdate())-year(参加工作时间)) 工龄,结婚状态,院系名称
from 教师信息
where (year(getdate())-year(参加工作时间))>18 and 婚否=0
  1. 新建查询,查询哪些课程没有同学选,显示课程号和课程名
select 课程信息.课程号,课程名
from 课程信息 left join 学生成绩 on 课程信息.课程号=学生成绩.课程号
where 学生成绩.课程号 is null
  1. 新建查询,查询最受学生欢迎(选课人数最多)的课程号、课程名,
select top 1 学生成绩.课程号,课程名
from 学生成绩 join 课程信息 on 学生成绩.课程号=课程信息.课程号
group by 课程号
order by count(*) desc

select 课程号,课程名
from 课程信息 
where 课程号=(
	select top 1 课程号 
	from 学生成绩 group by 课程号 
	order by COUNT(*) desc
	)
  1. 新建查询,查询在出生人数最多年份出生的学生学号、姓名和出生年年份
select 学号,姓名,year(出生日期) 出生年份
from 学生信息
where year(出生日期)=(
	select top 1 year(出生日期)
	from 学生信息
	group by year(出生日期)
	order by count(*) desc
	)


如有错误,烦请指正!
下一部分我们复习一下数据更新操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值