数据库 实验四 创建视图,使用视图,修改视图

1、创建视图

--***① 将Student Course 和sc表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G ***
CREATE VIEW V_S_C_G AS
	SELECT Student.sno,sname,course.cno,cname,grade
	FROM Student,SC,course
	WHERE SC.sno = Student.sno AND SC.cno = course.cno
GO

--***② 将各系学生人数,平均年龄定义为视图V_NUM_AVG ***
CREATE VIEW V_NUM_AVG AS
	SELECT sdept,COUNT(*) num,AVG(YEAR(GETDATE()) - YEAR(birthday)) avg_age
	FROM Student
	GROUP BY sdept
GO

--***③ 将student中信管系学生的个人信息定义为视图 V_IS ***
CREATE VIEW V_IS AS
	SELECT *
	FROM Student
	WHERE sdept = '信管'
GO

--***④ 将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G ***
CREATE VIEW V_AVG_C_G AS
	SELECT cno,COUNT(*) num,AVG(grade) avg_grade
	FROM SC
	GROUP BY cno
GO

--***⑤ 将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G ***
CREATE VIEW V_AVG_S_G AS
	SELECT sno,COUNT(*) num,AVG(grade) avg_grade
	FROM SC
	GROUP BY sno
GO

2、修改视图
重命名用代码我不知道怎么写,如果有知道的可以在评论区说一下,谢谢

--****2. 修改视图 ****
--***在查询分析器中使用更改视图的命令将上面建立的视图“V_IS”更名为“V_MIS” ***

3、使用视图

--****3.使用视图 ****
--***(1)查询平均成绩为90分以上的学生学号、姓名和成绩 ***
SELECT DISTINCT V_AVG_S_G.sno,sname,grade
FROM V_S_C_G,V_AVG_S_G
WHERE V_S_C_G.sno = V_AVG_S_G.sno AND avg_grade > 90

--***(2)查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩***
SELECT DISTINCT V_S_C_G.sno,sname,V_S_C_G.cno,grade
FROM V_S_C_G,V_AVG_C_G
WHERE sno IN(SELECT V_S_C_G.sno
			 FROM V_S_C_G,V_AVG_C_G
			 WHERE grade > avg_grade AND V_S_C_G.cno = V_AVG_C_G.cno
)

--***(3)按系统计各系平均成绩在80分以上的人数,结果按降序排列***
SELECT Student.sdept,COUNT(*)
FROM Student,V_AVG_S_G
WHERE Student.sno = V_AVG_S_G.sno AND avg_grade > 80
GROUP BY sdept
ORDER BY COUNT(*) DESC

4、修改视图

--*** (1)通过视图V_MIS,分别将学号为“1002”和“1004”的学生姓名更改为“1002_MMM”,”1004_MMM” 并查询结果 ***
UPDATE V_MIS
SET sno = '1006_MMM'
WHERE sno = '1006'
UPDATE V_MIS
SET sno = '1017_MMM'
WHERE sno = '1017'


--***(2)通过视图V_MIS,新增加一个学生记录 ('S12','YAN XI',’2001.10.10’,'IS'),并查询结果 ***
INSERT INTO V_MIS(sno,sname,birthday,sdept)
VALUES('S12','YAN XI','2001.10.10','IS')

--***(3)通过视图V_MIS,删除学号为“S12”和“001”的学生信息,并查询结果 ***
DELETE
FROM V_MIS
WHERE sno IN('S12','1001')

--***(4)要通过视图V_MIS,将学号为“1002”的姓名改为“1002_MMM”,是否可以实现?并说明原因 ***
可以,因为原表格中存在学号为 1002 的学生数据

--***(5)要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?并说明原因 ***
不可以,因为原表格中没有平均成绩这一列
  • 4
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一、实验目的 1.掌握SQL Server 2005的安装。 2.掌握SQL Server Management Studio的启动和使用。 3.掌握SQL Server 2005服务器的配置和注册。 4.掌握SQL Server 2005查询的基本使用。 5.掌握应用SQL Server Management Studio创建数据库的方法。 6.掌握应用SQL Server Management Studio修改和查看数据库的方法。 7.掌握应用SQL Server Management Studio删除数据库的方法。 8.掌握应用Transact-SQL语句创建数据库的方法。 9.掌握应用Transact-SQL修改和查看数据库的方法。 10.掌握通过Transact-SQL删除数据库的方法。 11.掌握SQL Server 2005数据库和操作系统物理文件的关系。 12.掌握数据库的分离和附加方法。 二、实验内容 1.完成SQL Server 2005开发版的安装。 提示:若计算机系统中已经安装有SQL Server 2005系统,则在安装时需要选择安装命名实例。安装过程中身份验证模式选择“混合模式”并设置sa账户的密码。 2.利用SQL Server配置管理器启动、停止SQL Server服务(包括默认实例和命名实例),配置SQL Server服务为自动启动。 3.利用SQL Server配置管理器配置进行SQL Server 2005网络配置,启用默认实例和命名实例的TCP/IP协议。 4.利用SQL Server外围配置器配置数据库引擎的服务及远程连接,设置为“本地连接和远程连接”,选择“同时使用TCP/IP和named pipes”。 5.利用SQL Server Management Studio注册安装的命名实例。 6.利用SQL Server Management Studio注册远程服务器。 提示:注册远程服务器时需要使用混合验证模式,利用sa账户和密码登录远程服务器。 7.启动SQL Server Management Studio,连接到服务器。新建一个查询,在其中输入如下代码: DECLARE @position int, @string char(5) SET @position = 1 SET @string = 'China' WHILE @position <= DATALENGTH(@string) BEGIN SELECT SUBSTRING(@string, @position, 1) 字符, ASCII(SUBSTRING(@string, @position, 1)) ASCII码 SET @position = @position + 1 END
### 回答1: 要创建这个视图,需要先确定哪些表需要使用。假设有学生表(students)、课程表(courses)和选课表(enrollments),其中选课表记录了每个学生选修了哪些课程以及对应的学分。 视图的创建语句如下: ``` CREATE VIEW student_credits AS SELECT enrollments.student_id, SUM(courses.credit) AS total_credits FROM enrollments JOIN courses ON enrollments.course_id = courses.id GROUP BY enrollments.student_id; ``` 这个视图会将每个学生学号和修课总学分列出来,可以通过以下语句查询: ``` SELECT * FROM student_credits; ``` 希望这个回答能够帮到你。 ### 回答2: 为了创建视图来统计每个学生的修课总学分,我们首先需要将学生学号、课程号和学分信息从不同的表中连接起来。通常,这些信息可能存储在不同的数据库表中,比如“学生表”、 “课程表” 和“选课表” 中。因此,我们需要通过 SQL 语句将这些表进行联结。 我们可以通过以下 SQL 语句来创建一个视图,用于统计每个学生的修课总学分: CREATE VIEW v_student_total_credit AS SELECT stu.id AS 学号, SUM(crd.credit) AS 总学分 FROM student stu JOIN sel_course sel ON stu.id = sel.stu_id JOIN course crs ON sel.crs_id = crs.id JOIN credit crd ON crs.credit_id = crd.id GROUP BY stu.id; 在这个视图中,我们创建了一个名为“v_student_total_credit”的视图,这个视图包含每个学生学号和他们修课的总学分。具体来说,我们从“学生表”(student)中选择学生的 ID,从“选课表”(sel_course)中选择学生选课的记录,从“课程表”(course)中选择学生选修的课程,以及从“学分表”(credit)中选择课程的学分。通过使用 JOIN 操作将这些表联结起来,我们可以获取每个学生修课的总学分。最后,通过使用 GROUP BY 子句将结果以学号分组,并使用 SUM 函数来计算每个学生的总学分。 通过运行上述 SQL 语句,我们就可以在数据库中创建一个视图,用于快速方便地统计每个学生的修课总学分。当我们需要查询这个信息时,只需要使用以下语句: SELECT * FROM v_student_total_credit; 执行该语句后,就可以获得一个表格,其中包含每个学生学号和他们的总学分。 通过创建这个视图,我们可以方便地对数据进行分析和报表制作,从而更好地了解每个学生的学习状况。 ### 回答3: 在数据库中,如果需要统计每个学生的修课总学分,我们可以通过创建视图来实现。 首先,需要在数据库中创建一个视图,该视图包含以下信息: - 学生学号 - 修课总学分 视图可以通过以下SQL语句创建: CREATE VIEW student_credits AS SELECT s.id AS student_id, SUM(c.credit) AS total_credits FROM student s JOIN course_selection cs ON s.id = cs.student_id JOIN course c ON cs.course_id = c.id GROUP BY s.id; 上述语句中,使用了JOIN关键字将三张表(student、course_selection、course)进行连接。其中,student表中存储了学生信息,course_selection表中存储了学生选课信息,course表中存储了课程信息。然后,通过SUM函数对每个学生的学分进行求和,最后使用GROUP BY关键字对学生学号进行分组。 视图创建完成后,我们可以通过以下SQL语句查询每个学生的修课总学分: SELECT student_id, total_credits FROM student_credits; 上述语句中,使用SELECT关键字从student_credits视图中查询学生学号和修课总学分。 通过创建视图,我们可以方便地查询每个学生的修课总学分,无需每次都编写复杂的SQL语句。此外,如果需要对统计方法进行修改,也只需要修改视图的定义即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xxxandwww

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

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

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

打赏作者

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

抵扣说明:

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

余额充值