实验二 SQL 语言——SELECT 查询操作(第五部分)
写在前面:本文中可能有错误,还请大佬斧正,如果小伙伴有什么好的方法,也可以发给我,我添加到里面6、 综合练习 (习题部分)(1) 查询选修课程“8105”且成绩在 80 到 90 之间的所有记录。(2) 查询成绩为 76、86 或 96 的记录。(3) 查询 9803 班的学生人数。(4) 查询至少有 4 名学生选修的并以 81 开头的课程的平均成绩。(5) 查询最低分大于 80,最高分小于等于
写在前面:本文中可能有错误,还请大佬斧正,如果小伙伴有什么好的方法,也可以发给我,我添加到里面
6、 综合练习 (习题部分)
(1) 查询选修课程“8105”且成绩在 80 到 90 之间的所有记录。
(2) 查询成绩为 76、86 或 96 的记录。
(3) 查询 9803 班的学生人数。
(4) 查询至少有 4 名学生选修的并以 81 开头的课程的平均成绩。
(5) 查询最低分大于 80,最高分小于等于 95 的 SNO 与平均分。
(6) 查询 9803 班学生所选各课程的课程号及其平均成绩。
(7) 查询选修“8105”课程的成绩高于“980301”号同学成绩的所有同学的记录。 (8) 查询与学号为“980101”的同学同岁的所有学生的 SNO,SNAME 和 SBIRTH。
(9) 查询“钱军”教师任课的课程号,选修其课程学生的学号和成绩。
(10) 查询选修某课程的学生人数多于 3 人的教师姓名。
(11) 查询同学选修编号为“8105”课程且成绩至少高于其选修编号为“8245”课程的同 学的 SNO 及“8105”课程成绩,并按成绩从高到低次序排列。
(12) 查询选修编号为“8105”课程且成绩高于所有选修编号为“8245”课程成绩的同学 的 CNO、SNO、GRADE。
(13) 列出所有教师和同学的姓名、性别、年龄。
(14) 查询成绩比该课程平均成绩高的学生的成绩表。
(15) 列出所有任课教师的 TNAME 和 DEPT。
(16) 列出所有未讲课教师的 TNAME 和 DEPT。
(17) 列出至少有 2 名男生的班号。
(18) 查询不姓“张”的学生的记录。
(19) 查询每门课最高分的学生的 SNO、CNO、GRADE。
(20) 查询与“李华”同性别并同班的同学的 SNAME。
(21) 查询“女”教师及其所上的课程。
(22) 查询选修“数据库系统”课程的“男”同学的成绩表。
(23) 查询所有比王立年龄大的教师姓名、年龄和王立的年龄。
(24) 查询不讲授“8104”号课程的教师姓名。
----------------------查询----------------------
--1.查询选修课程“8105”且成绩在 80 到 90 之间的所有记录
select *
from SC
where SC.CNO = '8105'
and SC.GRADE between 80 and 90
--2.查询成绩为 76、86 或 96 的记录
select *
from SC
where SC.GRADE in (76,86,96)
--3.查询 9803 班的学生人数
select count(*) as 人数
from Student
where Student.CLASS = '9803'
--4.查询至少有 4 名学生选修的并以 81 开头的课程的平均成绩
select count(distinct SC.SNO),SC.CNO,avg(SC.GRADE)
from SC
where SC.CNO like '81%'
group by SC.CNO
--5.查询最低分大于 80,最高分小于等于 95 的 SNO 与平均分
select SC.SNO,avg(SC.GRADE) 平均成绩
from SC
group by SC.SNO
having min(SC.GRADE) > 80 and max(SC.GRADE) <= 95
--6.查询 9803 班学生所选各课程的课程号及其平均成绩
select SC.CNO,avg(SC.GRADE) as 平均成绩
from SC
inner join Student on SC.SNO = Student.SNO
where Student.CLASS = '9803'
group by SC.CNO
--7.查询选修“8105”课程的成绩高于“980301”号同学成绩的所有同学的记录
select Student.*
from Student
inner join SC on SC.SNO = Student.SNO
where SC.CNO = '8105'
and SC.GRADE > (
select SC.GRADE
from SC
where SC.SNO = '980301')
--8.查询与学号为“980101”的同学同岁的所有学生的 SNO,SNAME 和 SBIRTH
select Student.SNO,Student.SNAME,Student.SBIRTH
from Student
where year(Student.SBIRTH) = (
select year(Student.SBIRTH)
from Student
where Student.SNO = '980101')
--9.查询“钱军”教师任课的课程号,选修其课程学生的学号和成绩
select SC.*
from Course
inner join Teacher on Teacher.TNO = Course.TNO
inner join SC on SC.CNO = Course.CNO
where Teacher.TNAME = '钱军'
--10.查询选修某课程的学生人数多于 3 人的教师姓名
select distinct Teacher.TNAME
from Teacher
inner join Course on Course.TNO = Teacher.TNO
inner join SC on Course.CNO = SC.CNO
where SC.CNO in(
select SC.CNO
from SC
group by SC.CNO
having count(*) > 3)
--11.查询同学选修编号为“8105”课程且成绩至少高于其选修编号为“8245”课程的同
-- 学的 SNO 及“8105”课程成绩,并按成绩从高到低次序排列
-- 这题并没有结果,只有980302通识选修了8105和8245这两门课程,但是其8245分数更高
select SC.SNO,SC.GRADE
from SC
where SC.CNO = '8105'
and SC.GRADE > (
select GRADE
from SC as S2
where S2.SNO = SC.SNO
and S2.CNO = '8245')
order by SC.GRADE desc
-- select SC.SNO,SC.GRADE
-- from SC
-- where SC.CNO = '8105'
-- and SC.GRADE > (
-- select GRADE
-- from SC as S2
-- where S2.SNO = SC.SNO
-- and S2.CNO = '8104')
-- order by SC.GRADE desc
--12.查询选修编号为“8105”课程且成绩高于所有选修编号为“8245”课程成绩 的同学
-- 的 CNO、SNO、GRADE
-- 这题依旧没有答案,从SC表可以看出,最高分就是980302同学的8245的96分
-- 和980102号同学的8244的96分,科目8105最高分95分
select *
from SC
inner join Student on Student.SNO = SC.SNO
where SC.CNO = '8105'
and SC.GRADE > (
select max(SC.GRADE)
from SC
where SC.CNO = '8245')
--12(改).查询选修编号为“8245”课程且成绩高于所有选修编号为“8105”课程成绩 的同学
-- 的 CNO、SNO、GRADE
select *
from SC
inner join Student on Student.SNO = SC.SNO
where SC.CNO = '8245'
and SC.GRADE > (
select max(SC.GRADE)
from SC
where SC.CNO = '8105')
--13.列出所有教师和同学的姓名、性别、年龄
--使用并集
select Student.SNAME as Name,Student.SEX as sex,Student.SBIRTH as birth
from Student
union
select Teacher.TNAME as Name,Teacher.SEX as sex,Teacher.TBIRTH as birth
from Teacher
--14.查询成绩比该课程平均成绩高的学生的成绩表
select *
from SC a
where a.GRADE not between 0
and(
select avg(GRADE)
from SC b
where a.cno=b.cno )
--15.列出所有任课教师的 TNAME 和 DEPT
select distinct Teacher.TNAME,Teacher.DEPT
from Teacher
inner join Course on Course.TNO = Teacher.TNO
where Course.TNO in (
select distinct Course.TNO
from Course)
--16.列出所有未讲课教师的 TNAME 和 DEPT
-- 所有老师都讲课,没有结果
select Teacher.TNAME,Teacher.DEPT
from Teacher
where Teacher.TNO not in (
select distinct Course.TNO
from Course)
--17.列出至少有 2 名男生的班号
select Student.CLASS
from Student
where SEX = '男'
group by Student.CLASS
having count(*) >= 2
--18.查询不姓“张”的学生的记录
select Student.*
from Student
where Student.SNAME not like '张%'
--19.查询每门课最高分的学生的 SNO、CNO、GRADE
select s1.SNO,s1.CNO,s1.GRADE
from SC as s1
where s1.GRADE IN (
select max(s2.GRADE)
from SC as s2
where s1.CNO = s2.CNO)
--20.查询与“李华”同性别并同班的同学的 SNAME
select Student.SNAME
from Student
where Student.SEX = (
select Student.SEX
from Student
where Student.SNAME = '李华')
and Student.CLASS = (
select Student.CLASS
from Student
where Student.SNAME = '李华')
--21.查询“女”教师及其所上的课程
select Teacher.TNAME,Course.CNO,Course.CNAME
from Teacher
inner join Course on Course.TNO = Teacher.TNO
where Teacher.SEX = '女'
--22.查询选修“数据库系统”课程的“男”同学的成绩表
select distinct SC.SNO,Student.SNAME,Student.SEX,Course.CNAME,SC.GRADE
from SC
inner join Student on Student.SNO = SC.SNO
inner join Course on Course.CNO = SC.CNO
where Student.SEX = '男'
and Course.CNAME = '数据库系统'
--23.查询所有比王立年龄大的教师姓名、年龄和王立的年龄
select Teacher.TNAME,(year(GETDATE())-year(Teacher.TBIRTH)) as age
from Teacher
where (year(GETDATE())-year(Teacher.TBIRTH)) > (
select year(GETDATE())-year(Teacher.TBIRTH)
from Teacher
where Teacher.TNAME = '王立')
or Teacher.TNAME = '王立'
--24.查询不讲授“8104”号课程的教师姓名
select Teacher.TNAME
from Teacher
where Teacher.TNAME not in(
select Teacher.TNAME
from Teacher
inner join Course on Course.TNO = Teacher.TNO
where Course.CNO = '8104')
还请大家指出里面的错误,我好改正,谢谢啦
更多推荐


所有评论(0)