创建和使用视图

/*
2017-04-27 周四晚上机实践

实验五
创建视图,并查询创建后的视图,测试该视图能否满足要求;

*/

use [150201101945_ScoreDB]
GO

SELECT *
FROM STUDENT


--1. 创建视图,并查询创建后的视图,测试该视图能否满足要求;
--(1)设计一个视图,用于简化用户的查询操作,例如:把上面的三个表做自然连接,使用外连接,可以保留学生表和课程表的所有记录。创建该视图。
CREATE VIEW version1
AS
    SELECT c.Sno,Sname,Ssex,Sage,Sdept,b.Cno,Cname,Ccredit,Semster
    FROM SC a FULL OUTER JOIN Course b ON a.Cno=b.Cno FULL OUTER JOIN  STUDENT C ON a.Sno=c.Sno 

SELECT *
FROM version1   

--(2)设计一个视图,使表中的数据以另一种方式显示给用户,例如:将学生的年龄转换成出生年份呈现给用户,创建该视图。
CREATE VIEW version2
AS
    SELECT Sno,Sname,Ssex,year(GETDATE())-Sage 出生年份,Sdept
    FROM Student

SELECT *
FROM version2   

--(3)设计一个视图,改变表中的列名。例如:将英文列名转换成中文列名。
CREATE VIEW version3(学号,姓名,性别,年龄,学院)
AS
    SELECT Sno,Sname,Ssex,Sage,Sdept
    FROM Student

SELECT *
FROM version3       

--(4)设计一个视图,对于表中的机密数据提供安全保护,实现数据的安全性控制。
--例如:创建一个所有计算机系学生的视图 ,并且在视图中只显示学号、姓名、性别、所在系这四列,
--然后把对于视图的查询权限授予某些用户,就可以控制这些用户对学生信息表的数据访问控制了;创建出该视图。
CREATE VIEW version4
AS 
    SELECT Sno,Sname,Ssex,Sdept
    FROM Student
    WHERE Sdept='计算机系'

execute sp_addlogin 'hello123'
execute sp_adduser 'hello123'
GRANT select on version4 TO  hello123

SELECT *
FROM version4

--(5)设计一个视图,用于更清晰的表达用户的查询。
--例如:查询学生选修课程成绩大于该课程平均分的选课信息,列出学号、课程号和成绩;
--可以先创建一个包含课程号和该课程平均分的视图,然后再利用视图查询出学生成绩大于该课程平均分的选课记录。
CREATE VIEW version5_avg
AS
    SELECT Cno,AVG(grade) avg_grade
    FROM SC
    group by cno

CREATE VIEW version5_find
AS 
    SELECT a.Sno,a.Cno,a.Grade
    FROM SC a FULL OUTER JOIN version5_avg b ON a.Cno=b.Cno
    WHERE a.grade>b.avg_grade

SELECT *
FROM version5_find

--(6)设计一个视图,用于限制用户对于某个基本表的结构的修改。
--例如:根据学生表创建一个视图,使得用户不能随便修改学生表的基本结构了。创建出该视图。(该小题为选做内容,可以不做)

CREATE VIEW version6
AS
    SELECT *
    FROM Student

GRANT SELECT ON version6 TO [public]

SELECT *    
FROM version6

你可能感兴趣的:(数据库SQL)