关于学生,课程,选课三张表的sql查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于学生,课程,选课三张表的sql查询相关的知识,希望对你有一定的参考价值。

有三张表,学生(学号,姓名,性别,年龄,系),课程(课程号,课程名称),选课(学号,课程号,成绩),用sql语句将选课在5门以上的学生的学号,姓名,平均分,选课门数按平均分降序排序,并将结果存于数据库临时表a中
请各位大虾帮忙解决,困惑中!

select 选课.学号,姓名,AVG(成绩)'平均分',COUNT(选课.课程号)'选课门数' from 学生,课程,选课 where 学生.学号=选课.学号 and 课程.课程号=选课.课程号 group by 选课.学号,姓名 HAVING COUNT(选课.课程号)>4 ORDER BY AVG(成绩) DESC
--------------------------------------
CREATE VIEW 查询 AS
select top 100 选课.学号,姓名,AVG(成绩)'平均分',COUNT(选课.课程号)'选课门数' from 学生,课程,选课 where 学生.学号=选课.学号 and 课程.课程号=选课.课程号 group by 选课.学号,姓名 HAVING COUNT(选课.课程号)>4 ORDER BY AVG(成绩) DESC

其中DESC是降序排列,ASC是升序排列,默认是升序
ORDER BY AVG(成绩)也可以写成ORDER BY 平均分,因为已经指定了别名
“CREATE VIEW 查询”中的“查询”是新表名, 如果有“ORDER BY AVG(成绩) DESC ”这句,则须有“top”,否则出错“除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。”
参考技术A select a.学号,a.姓名,c.(总分/b.选课门数) as 平均分,b.选课门数 from
(select 学号,姓名 from tb1)a
left join
(select count(课程号) as 选课门数,学号 from tb3 group by 学号)b
on a.学号=b.学号
left join
(select sum(成绩)as 总分,学号 from tb3 group )c
on a.学号=b.学号
order by 平均分 desc

数据库练习

 

数据库中有三张表,分别为 student,course,SC(即学生表,课程表,选课表)

 

--1.分别查询学生表和学生修课表中的全部数据。

--2.查询成绩在 70 到 80 分之间的学生的学号、课程号和成绩。

--3.查询 C01 号课程成绩最高的分数

--4.查询学生都选修了哪些课程,要求列出课程号。


--5.查询 Northwind 数据库中 orders 表的 OrderID、CustomerID 和 OrderDate, --并将最新的定购日期(OrderDate)列在前边。
--6.查询 Northwind 数据库中 orders 表的 ShipCountry 列以 B,C,D,F--//ShipCountryBCDF --开始且第三个字符为"a"的 OrderID、CustomerID 和 ShipCountry 的信息。//OrderID、 CustomerID 第三个字符为"a"


--7.查询Northwind数据库中orders表的ShipCountry列不以A,B,C,D,E,F开始且最后一个 字母是"a"的 OrderID、CustomerID 和 ShipCountry 的信息。
--8.查询修了 C02 号课程的所有学生的平均成绩、最高成绩和最低成绩。
--9.统计每个系的学生人数。
--10.统计每门课程的修课人数和考试最高分。


--11.统计每个学生的选课门数,并按选课门数的递增顺序显示结果。
--12.统计选修课的学生总数和考试的平均成绩。
--13.查询选课门数超过 2 门的学生的平均成绩和选课门数。
--14.列出总成绩超过 200 分的学生,要求列出学号、总成绩。


--15.查询 pubs 数据库的 titles 表中每类图书的平均价格超过 12.0 元的书的类型(Type)、 --平均价格和最高价格。
--16.查询 pubs 数据库的 titles 表中每类图书中图书的数目超过 3 本的图书的总价格。


--17.查询选修了 c02 号课程的学生的姓名和所在系。
--18.查询成绩 80 分以上的学生的姓名、课程号和成绩,并按成绩的降序排列结果。
--19.查询计算机系男生修了"数据库基础"的学生的姓名、性别、成绩。


--20.查询哪些学生的年龄相同,要求列出年龄相同的学生的姓名和年龄。

--这题使用到了表的自连接,所以需要给表取两个别名,如 A 和 B
--21.查询哪些课程没有人选,要求列出课程号和课程名。
--22.查询有考试成绩的所有学生的姓名、修课名称及考试成绩 --要求将查询结果放在一张新的永久表(假设新表名为 new-sc)中。
--23.分别查询信息系和计算机系的学生的姓名、性别、修课名称、修课成绩, --并要求将这两个查询结果合并成一个结果集, --并以系名、姓名、性别、修课名称、修课成绩的顺序显示各列。 --//此题用到了并 union 查询


--24.用子查询实现如下查询: --(1) 查询选修了 C01 号课程的学生的姓名和所在系。

--(2) 查询数学系成绩 80 分以上的学生的学号、姓名。
--(3) 查询计算机系学生所选的课程名.

 


--25.将计算机系成绩高于 80 分的学生的修课情况插入到另一张表中,分两种情况实现:
--26.删除修课成绩小于 50 分的学生的修课记录
--27.将所有选修了"c01"课程的学生的成绩加 10 分。

以上是关于关于学生,课程,选课三张表的sql查询的主要内容,如果未能解决你的问题,请参考以下文章

sql语言多表查询

sql 调用已经建立的存储过程

数据库练习

用SQL语句写出完成如下查询

SQL查询每门课程最高分学生的学号,课程号,成绩

SQL:查询每门课程的课程名、选课学生姓名及其学号,选课人数