- 实验目的
- 熟练掌握对象资源管理器(界面)方式及命令方式视图的创建方法。
- 熟练掌握对象资源管理器(界面)方式及命令方式通过视图添加、修改、删除数据的方法。
- 实验内容
1.创建视图
(1)创建YGGL数据库上的视图DS_VIEW, 视图包含Departments表的全部列。代码如下:
CREATE VIEW DS_VIEW
AS SELECT * FROM Departments
(2)创建YGGL数据库上的视图Employees_view, 视图包含员工编号、姓名和实际收入三列。使用如下SQL语句:
CREATE VIEW Employees_view(EmployeesID, Name, RealIncome)
AS
SELECT Employees.EmployeesID, Name, InCome-OutCome
FROM Employees, Salary
WHERE Employees.EmployeesID = Salary.EmployeesID
GO
2. 查询视图
(1)从视图DS_VIEW中查询出部门编号为“3”的部门名称。代码如下,
SELECT DepartmentName
FROM DS_VIEW
WHERE DepartmentID='3'
(2)从视图Employees_view中查询出姓名为“王林”的员工的实际收入。代码如下:
SELECT RealIncome
FROM Employees_view
WHERE Name='王林'
3.更新视图
在更新视图前需要了解可更新视图的概念,了解什么视图是不可以进行修改的。更新视图真正更新的是和视图关联的表。
(1)向视图DS_VIEW中插入一行数据“6,广告部,广告业务”。代码如下:
INSERT INTO DS_VIEW VALUES(6,'广告部','广告业务')
执行完该命令,使用SELECT语句分别查看视图DS_VIEW和基本表Departments中发生的变化,尝试向视图Employees_view中插入一行数据,看看会发生什么情况。
(2)修改视图DS_VIEW,将部门编号为“5”的部门名称修改为“生产车间”。代码如下:
UPDATE DS_VIEW
SET DepartmentName='生产车间'
WHERE DepartmentID ='5'
执行完该命令,使用SELECT语句分别查看视图DS_VIEW和基本表Departments中发生的变化,
(3)将视图Employees_view中员工编号为“000001”的员工的姓名修改为“王浩”。代码如下:
UPDATE Employees_view
SET Name='王浩'
WHERE EmployeesID='000001'
(4)删除视图DS_ VIEW中部门编号为“1”的一行数据。代码如下:
DELETE FROM DS_VIEW
WHERE DepartmentID='1'
注意:
为了便于以后的操作,请将删除的数据尽快恢复到原来的状态。
4. 删除视图
删除视图DS_VIEW。代码如下:
DROP VIEW DS_VIEW
5.在界面工具中操作视图
(1)创建视图:启动“SQL Server Management Studio”,在“对象资源管理器”中展开“数据库”-“YGGL”, 选择其中的“视图”,右击鼠标,在弹出的快捷菜单上选择“新建视图”菜单项。在随后出现的“添加表”窗口中,添加所需关联的基本表。在视图窗口的关系图窗口显示了基本表的全部列信息,根据需要在窗口中选择创建视图所需的字段,完成后单击“保存”按钮保存。
(2)查询视图:新建一个查询,输入T-SQL查询命令即可像查询表一样查询视图。
(3)删除视图:展开“YGGL数据库”-“视图”,选择要删除的视图,右击并选择“删除”菜单项,确认即可。
三、思考与练习
(1)在创建视图时SELECT语句有哪些限制?
不能在SELECT语句的FROM子句中使用子查询来定义视图的。
(2)在创建视图时有哪些注意点?
1).与创建表一样,创建视图的名称必须唯一
2).创建视图的个数并没限制,但是如果一张视图嵌套或者关联的表过多,同样会引发性能问题,在实际生产环节中部署时务必进行必要的性能检测。
3).在过滤条件数据时如果在创建视图的sql语句中存在where的条件语句,而在使用该视图的语句中也存在where条件语句时,这两个where条件语句会自动组合
4).order by 可以在视图中使用,但如果从该视图检索数据的select语句中也含有order by ,那么该视图中的order by 将被覆盖。
5).使用可以和普通的表一起使用,编辑一条联结视图和普通表的sql语句是允许的。
(3)创建视图,包含员工编号、姓名、所在部门名称和实际收入这几列。
(4)若视图关联了某表中的所有字段,而此时该表中添加了新的字段,视图中能否查询到该字段?
不能。
(5)自己创建一个视图,并查询视图中的字段。
(6)视图Employees_view中无法插入和删除数据,其中的RealIncome字段也无法修改,为什么?
例如有个表 TestTab (id INT PRIMARY KEY, val VARCHAR(10), remark VARCHAR(80) )
CREATE VIEW view1 AS SELECT id, val FROM TestTab;这个视图是可以 插入/修改/删除数据的
但是如果是一个CREATE VIEW view2 AS SELECT val, COUNT(1) FROM TeseTab GROUP BY val.
那么这个视图要插入/修改/删除,那是不行的了。