要求

在teacher、student、course、tc、sc表上完成以下任务:

请用两种方式完成以下任务,两种方式建立的索引或者视图的名字加序号区别,

如两种方式建立的同一个视图的名字分别为view1和view2

建立视图:

(1) 请实现能查询选课学生的姓名、选课门数、总分、平均分,最高分、最低分的视图

(2) 请实现能查询每个学生的姓名、选课门数、总分、平均分,最高分、最低分的视图

(3) 请实现能查询每门课程的课程名称、选课人数、平均分,最高分、最低分,且按平均分降序排列的视图

(4) 请实现能查询开课教师的教师编号、姓名、开课门数的视图

(5) 请实现能查询选课学生的姓名、课程名、成绩的视图

(6) 请实现能查询至少有一门与“张建国”选课相同的学生的姓名、课程名和系别。

(7) 请实现能查询选修课号为“01001”课程且成绩高于课程“01002”学生的姓名和这两门课程的课程名和成绩。

建立索引:

(1) 对教师表Teacher中的教师号Tno创建聚簇索引,并按降序排列。

(2) 对学生选课表SC,按学号Sno升序,课号Cno升序排列,再按成绩Score降序排列。

(3) 对学生表Student中的姓名Sname创建唯一索引,并按升序排列。

过程

1.建立视图

注意:view2----交互式,view1----sql语句

(1)请实现能查询选课学生的姓名、选课门数、总分、平均分,最高分、最低分的视图

 a.sql语句

SELECT sname AS 姓名,count(cno) AS 选课门数, sum(Score) AS 总分,avg(Score) as 平均分,max(Score) AS 最高分, min(Score) AS 最低分
FROM SC,Student
WHERE SC.Sno=Student.Sno
GROUP BY SC.Sno

b.交互式



(2)请实现能查询每个学生的姓名、选课门数、总分、平均分,最高分、最低分的视图

a.sql语句

create view view21 AS
SELECT sname AS 姓名,ifnull(count(SC.cno),0) AS 选课门数, IFNULL(sum(SC.Score),0) AS 总分,IFNULL(avg(Score),0) as 平均分,IFNULL(max(Score),0) AS 最高分, IFNULL(min(Score),0) AS 最低分
FROM Student
LEFT JOIN SC ON SC.Sno=Student.Sno
GROUP BY Student.Sname,Student.Sno
SELECT * FROM view21

  

b.交互式


(3)请实现能查询每门课程的课程名称、选课人数、平均分,最高分、最低分,且按平均分降序排列的视图

    a.sql语句

CREATE view view31 AS
SELECT Cname AS 课程名称,IFNULL(count(SC.Sno),0) AS 选课人数,IFNULL(avg(Score),0) as 平均分,IFNULL(max(Score),0) AS 最高分, IFNULL(min(Score),0) AS 最低分
FROM Course
LEFT JOIN SC ON SC.Cno=Course.Cno COLLATE utf8mb4_unicode_ci
GROUP BY Course.cno ,Course.Cname 
ORDER BY 平均分 DESC
SELECT * FROM view31


    b.交互式


(4)请实现能查询开课教师的教师编号、姓名、开课门数的视图

      a.sql语句

CREATE view view41 AS
SELECT TC.Tno AS 教师编号,Tname AS 姓名,count(Tc.Tno) AS 开课门数
FROM TC,Teacher
WHERE TC.Tno=Teacher.Tno
GROUP BY TC.tno
SELECT * FROM view41


    b.交互式


(5)请实现能查询选课学生的姓名、课程名、成绩的视图

    a.sql语句

CREATE VIEW view51 AS
SELECT sname AS 姓名,cname AS 课程名,score AS 成绩 FROM SC,Student,Course
WHERE sc.sno=Student.sno AND sc.cno=Course.cno COLLATE utf8mb4_unicode_ci
SELECT * FROM view51


    b.交互式


(6)请实现能查询至少有一门与“张建国”选课相同的学生的姓名、课程名和系别。

    a.sql语句

CREATE VIEW view61 AS
SELECT sname AS 姓名,cname AS 课程名,dept AS 系别 FROM SC AS a1,Student,Course
WHERE student.sname!="张建国" and a1.sno=Student.sno AND Course.cno=a1.cno   COLLATE utf8mb4_unicode_ci
AND EXISTS
(
SELECT 1 FROM  student,SC AS a2
WHERE  Student.sname="张建国" AND a2.sno=Student.sno AND a1.cno=a2.cno COLLATE utf8mb4_unicode_ci
)
SELECT * FROM view61


    b.交互式


(7)请实现能查询选修课号为“01001”课程且成绩高于课程“01002”学生的姓名和这两 门课程的课程名和成绩。

    a.sql语句

CREATE VIEW view71 AS
SELECT sname AS 姓名,cname AS 课程名, score AS 成绩 FROM Student,sc as a3,Course
WHERE a3.sno=Student.sno AND a3.cno = Course.cno COLLATE utf8mb4_unicode_ci
AND EXISTS
(
SELECT 1 FROM sc AS a1,SC as a2
WHERE a1.cno="01001" AND a2.cno="01002" AND a1.sno=a3.sno AND a2.sno=a3.sno 
AND a1.score > a2.score COLLATE utf8mb4_unicode_ci)
SELECT * FROM view71


    b.交互式


2.建立索引

(1) 对教师表Teacher中的教师号Tno创建聚簇索引,并按降序排列。

    a.sql语句

ALTER TABLE Teacher ADD PRIMARY KEY(tno DESC)
SELECT * from Teacher


    b.交互式

在mysql语句中自动将主键设置为聚簇索引,该交互式的结果和sql语句结果一致


(2) 对学生选课表SC,按学号Sno升序,课号Cno升序排列,再按成绩Score降序排列。

    a.sql语句

CREATE INDEX idx_sc on SC (sno ,cno,score DESC)


    b.交互式


(3) 对学生表Student中的姓名Sname创建唯一索引,并按升序排列。

    a.sql语句

CREATE UNIQUE INDEX idx_student ON  Student(sname)


    b.交互式

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。