SQL 创建视图
SQL中的视图
视图是存储在数据库中的SQL语句,与其链接的名称。可以将其描述为SQL查询形式中的表的组合。它可以存储所有表行,也可以只存储表中选择的几行。用户可以使用单个或多个表在SQL中创建视图。它取决于用于创建视图的SQL查询。
用户创建视图是为了将存储在特定表中的数据表示为自然或直观组织数据的虚拟表。它还使管理员能够限制对数据的访问,以便用户只能查看或编辑他们想要的表的特定元素,而不会更改其他部分。它还总结了来自多个表的数据,这些数据可用于基于数据创建报表。
创建视图
如果用户想要在数据库中创建视图,则可以使用CREATE VIEW语句来实现。用户可以使用单个或多个表来创建视图。在SQL中,用户还可以使用另一个视图来创建视图。
在在数据库中实现视图之前,用户必须确保他们具有实现所需的所有权限。主要由数据库管理员创建视图。
实施视图的语法
在SQL中创建视图的语法如下:
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
在上述语法中,我们使用了一个单独的表,但是用户可以使用与任何其他SQL SELECT查询中使用的相同语法,在SELECT语句中包含多个表。
在SQL中实现视图
考虑用户希望使用Students表创建一个视图的情况。Students表包含以下记录:
S_ID | F_Name | L_Name | Gender | P_No |
---|---|---|---|---|
1 | Aman | Verma | M | 759603293 |
2 | Harsh | Sharma | M | 989603293 |
3 | Vijay | Singh | M | 792503293 |
4 | Shyam | Gupta | M | 882103293 |
5 | Abhay | Tyagi | M | 305203293 |
6 | Rita | Verma | F | 778203293 |
实现以下SQL查询以创建上述表格。
-- create a table
CREATE TABLE Students (
S_ID INT PRIMARY KEY,
F_Name VARCHAR(50),
L_Name VARCHAR(50),
gender VARCHAR(1),
P_No INT
);
-- insert some values
INSERT INTO Students VALUES (1, 'Aman','Verma', 'M', 759603293);
INSERT INTO Students VALUES (2, 'Harsh','Sharma', 'M', 989603293);
INSERT INTO Students VALUES (3, 'Vijay','Singh', 'M', 792503293);
INSERT INTO Students VALUES (4, 'Shyam','Gupta', 'M', 882103293);
INSERT INTO Students VALUES (5, 'Abhay','Tyagi', 'M', 305203293);
INSERT INTO Students VALUES (6, 'Rita','Verma', 'F', 778203293);
输出:
用户希望在视图中只显示两列。这两列是来自Students表的F_Name和L_Name。创建视图的查询如下:
CREATE VIEW Student_VIEW AS
SELECT F_Name, L_Name
FROM Students;
现在,您可以使用Student_VIEW在SQL中实现查询,方式与在另一张表上实现查询相同。
在视图上实现查询
查询视图的语法与查询表的语法类似。以下是在Student_VIEW上实现SELECT查询的示例。
SELECT * FROM Student_VIEW;
输出:
以上查询返回的结果如下:
WITH CHECK OPTION
它是在SQL中实现CREATE VIEW的一个选项。在SQL中实现WITH CHECK OPTION可以保证视图中使用的每个UPDATE和INSERT查询都满足视图创建时定义的所有条件。
如果任何UPDATE/INSERT语句不满足条件,则该特定SQL语句将返回一个错误。让我们看一个例子来看如何使用WITH CHECK OPTION实现视图。
CREATE VIEW Student_VIEW AS
SELECT F_Name, L_Name
FROM Students
WHERE L_Name IS NOT NULL
WITH CHECK OPTION;
在这种情况下,使用WITH CHECK OPTION将确保视图的Age列中没有NULL值。如果插入语句在视图的age列中有NULL值,将返回错误。
更新视图
用户可以在以下场景下更新当前视图。
SELECT子句中不能包含关键字DISTINCT。
SELECT子句中不能包含汇总函数。
SELECT子句中不能包含集合函数。
SELECT子句中不能包含集合运算符。
SELECT子句中不能包含ORDER BY子句。
FROM子句中不能包含多个表。
WHERE子句中不能包含子查询。
查询中不能包含GROUP BY或HAVING。
可能需要更新计算列。
如果一个视图满足上述所有情况,那么用户可以对该视图执行更新操作。让我们实施一个SQL查询来更新视图中的值。以下语句将更新Aman的年龄。
UPDATE Student_VIEW
SET L_Name = 'Yadav'
WHERE name = 'Aman';
它将修改基本表Student,并且视图将显示相同的结果。现在让我们尝试在基本表上实现一个SQL查询,然后实现SELECT查询来检索给定的结果。
向视图中插入行
用户可以在视图中插入新记录。如果用户想插入行,则用户必须确保满足上述场景。相同的规则适用于Update命令和INSERT命令。
在这里,用户不能在Student_VIEW中添加行,因为在创建视图时用户先前未包含所有的NOT NULL字段。如果用户将列中的字段设置为NOT NULL,他们将能够插入新的记录,因为他们可以在表中添加新的记录。
从视图中删除行
也可以从视图中删除现有行。执行删除行的规则与在数据上执行UPDATE或插入操作时适用的规则相似。
考虑一个场景,用户想要删除所有年龄为22的记录。给定的查询将删除年龄列中数据值为22的所有记录:
DELETE FROM Student_VIEW
WHERE L_Name = 'Verma';
假设用户实施了上述查询,从基本表Student中删除一行。修改后的结果也将显示在Student_VIEW中。当您使用SELECT查询来检索表时,它们最终删除了基本表CUSTOMERS中的一行,这也将反映在视图中。结果如下所示:
删除视图
当用户创建视图时,可能会出现需要删除视图的情况,如果不再需要。对视图的删除称为删除视图。实施删除视图的DROP查询的语法类似于实施DROP表命令的表。
DROP VIEW view_name;
下面的查询将删除Student_VIEW:
DROP VIEW Student_View;