SQL 创建View
在SQL中的View
View是存储在数据库中的带有名称链接的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);
输出:
用户希望在视图中仅显示两列。这两列是来自学生表的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 创建
它是可以在SQL中实现的一个选项,用于在其中创建视图。在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,它们将能够插入新记录,就像他们可以在表中添加新记录一样。
从视图中删除行
也可以从视图中删除现有行。执行行删除的规则与在数据上执行更新或插入操作适用的规则类似。
考虑一个场景,用户想要删除所有age为22的记录。给定的查询将删除age列中数据值为22的所有记录:
DELETE FROM Student_VIEW
WHERE L_Name = 'Verma';
假设用户使用上述查询从基本表Student中删除一行。修改后的结果也将显示在Student_VIEW中。当使用上述查询并带有SELECT查询来检索该表时,他们最终从基本表CUSTOMERS中删除了一行,这将反映在视图本身中。结果如下:
删除视图
当用户创建一个视图时,可能存在这样的情况,用户需要删除视图,如果不再需要。视图的删除称为删除视图。实施删除视图的语法类似于实施删除表的DROP命令的语法。
DROP VIEW view_name;
下面的查询将删除Student_VIEW:
DROP VIEW Student_View;