SQL 视图

SQL 视图

SQL提供了视图的概念,它隐藏了数据的复杂性并限制了对数据库的不必要访问。它允许用户仅访问特定的列,而不是整个数据表。

结构化查询语言(SQL)中的视图被认为是虚拟表,它依赖于预定义SQL语句的结果集。

和SQL表一样,视图也以行和列的形式存储数据,但行在数据库中没有任何物理存在。

任何数据库管理员和用户都可以通过从一个或多个数据库表中选择列来轻松创建视图。根据需要,他们还可以删除和更新视图。

使用WHERE子句,视图可以存储表的所有记录或特定记录。

创建SQL视图

通过使用CREATE VIEW语句,您可以轻松地在结构化查询语言中创建视图。您可以从单个表或多个表中创建视图。

从单个表创建视图的语法

CREATE VIEW View_Name AS  
SELECT Column_Name1, Column_Name2, ....., Column_NameN  
FROM Table_Name  
WHERE condition;  

在语法中,View_Name是你想在SQL中创建的视图的名称。SELECT命令指定表的行和列,WHERE子句是可选的,用于从表中选择特定的记录。

从多个表创建视图的语法

你可以通过在SELECT语句中包含多个表来创建视图。

REATE VIEW View_Name AS  
SELECT Table_Name1.Column_Name1, Table_Name1.Column_Name2, Table_Name2.Column_Name2, ....., Table_NameN.Column_NameN  
FROM Table_Name1, Table_Name2, ....., Table_NameN
WHERE condition;  

从单个表创建视图的示例

让我们考虑 Student_Details 表,它包含Stu_ID、Stu_Name、Stu_Subject和Stu_Marks列。Student_Details的数据显示在以下表中:

Student_ID Stu_Name Stu_Subject Stu_Marks
1001 Akhil Math 85
1002 Balram Science 78
1003 Bheem Math 87
1004 Chetan English 95
1005 Diksha Hindi 99
1006 Raman Computer 90
1007 Sheetal Science 68

表:学生详情

假设你想创建一个视图,包含那些分数大于85分的学生的学生ID、科目和分数。为此,你需要键入以下查询语句:

CREATE VIEW Student_View AS  
SELECT Student_ID, Stu_Subject, Stu_Marks
FROM Student_Details
WHERE Stu_Marks > 85;
Select * FROM Student_View;

输出:

Student_ID Stu_Subject Stu_Marks
1001 Math 85
1003 Math 87
1004 English 95
1005 Hindi 99
1006 Computer 90

视图: 学生视图

从多个表创建视图示例

让我们考虑两个表, 学生详情表教师详情表。 学生详情表包括学生ID,学生姓名,学生科目和学生成绩列。而教师详情表包括教师ID,教师姓名,教师科目和教师所在城市列。学生详情和教师详情的数据在下面的两个表中显示:

Student_ID Stu_Name Stu_Subject Stu_Marks
1001 Akhil Math 85
1002 Balram Science 78
1003 Bheem Math 87
1004 Chetan English 95
1005 Diksha Hindi 99
1006 Raman Computer 90
1007 Sheetal Science 68

表格:学生详情

Teacher_ID Teacher_Name Teacher_Subject Teacher_City
2001 Arun Math Gurgaon
2002 Manoj Science Delhi
2003 Reena SST Noida
2004 Parul English Gurgaon
2005 Nishi Hindi Noida
2006 Anuj Computer Delhi
2007 Ram Physical Education Delhi

表:Teacher_Details

假设您想从Student_Details和Teacher_Details表中创建一个具有Stu_ID、Stu_Name、Teacher_ID和Teacher_Subject列的视图。

CREATE VIEW Student_Teacher_View AS  
SELECT Student_Details.Student_ID, Student_Details.Stu_Name, Teacher_Details.Teacher_ID, Teacher_Details.Teacher_Subject 
FROM Student_Details, Teacher_Details
WHERE Student_Details.Stu_Subject = Teacher_Details.Teacher_Subject;

要显示Student_Teacher_View的数据,您需要输入以下SELECT查询语句:

Select * FROM Student_Teacher_View;

输出:

Student_ID Stu_Name Teacher_ID Teacher_Subject
1001 Akhil 2001 Math
1002 Balram 2002 Science
1004 Chetan 2004 English
1005 Diksha 2005 Hindi
1006 Raman 2006 Computer

查看:学生教师查看

更新SQL视图

我们还可以使用结构化查询语言修改现有数据,并将新记录插入视图中。在SQL中,只有符合以下条件的视图才能被修改:

  1. 只有依赖于一张表的视图可以被更新。SQL不允许更新依赖于多张表的视图。
  2. 视图的字段不应包含NULL值。
  3. 视图的定义中不能包含子查询和DISTINCT关键字。
  4. 如果用于创建视图的SELECT语句中包含JOIN或HAVING或GROUP BY子句,视图将无法进行更新。
  5. 如果视图的任何字段包含任何SQL聚合函数,则无法修改该视图。

更新视图的语法

CREATE OR REPLACE VIEW View_Name AS
SELECT Column_Name1, Column_Name2, ....., Column_NameN  
FROM Table_Name  
WHERE condition;  

示例-更新视图

如果我们想要更新上述的Student_View,并且将Student表中的Stu_Name属性添加到该视图中,您需在SQL中键入以下的Replace查询语句:

CREATE OR REPLACE VIEW Student_View  AS
SELECT Student_ID, Stu_Name, Stu_Subject, Stu_Marks
FROM Student_Details
WHERE Stu_Subject = 'Math';

上述语句更新现有的Student_View,并根据SELECT语句更新数据。

现在,您可以通过输入以下查询来查看虚拟表:

SELECT * FROM Student_View;

输出:

Student_ID Stu_Name Stu_Subject Stu_Marks
1001 Akhil Math 85
1003 Bheem Math 87

查看:Student_View

将新行插入现有视图

就像数据库表的插入过程一样,我们也可以在视图中插入记录。以下SQL INSERT语句用于在视图中插入新行或记录:

INSERT INTO View_Name(Column_Name1, Column_Name2 , Column_Name3, ....., Column_NameN) VALUES(value1, value2, value3, ...., valueN);

在视图中插入新记录的示例

假设您想要在Student_View中插入一位新学生的记录,那么您需要在SQL中编写以下查询:

INSERT INTO Student_View (Student_ID, Stu_Subject, Stu_Marks) VALUES (1007, Hindi, 89);

现在,你可以通过以下查询检查新记录是否插入了Student_View中:

SELECT * FROM Student_View;

输出:

Student_ID Stu_Subject Stu_Marks
1001 Math 85
1003 Math 87
1004 English 95
1005 Hindi 99
1006 Computer 90
1007 Hindi 89

视图:Student_View

从视图中删除现有行

就像删除数据库表的过程一样,我们也可以从视图中删除记录。以下SQL DELETE语句用于从视图中删除现有行或记录:

DELETE FROM View_Name WHERE Condition;

示例:从视图中删除记录

假设您想要删除Student_View中科目为数学的学生记录,则需要键入以下SQL查询:

DELETE FROM Student_View WHERE Stu_Subject = 'Math' ;

现在,您可以使用以下查询检查记录是否已从Student_View中删除:

SELECT * FROM Student_View;

输出:

Student_ID Stu_Subject Stu_Marks
1004 English 95
1005 Hindi 99
1006 Computer 90
1007 Hindi 89

查看:学生视图

删除视图

如果不再需要,我们还可以从数据库中删除现有的视图。使用以下SQL DROP语句删除视图:

DROP VIEW View_Name;

删除视图示例

假设你想删除上面的Student_View,那么你需要在结构化查询语言中键入以下查询:

DROP VIEW Student_View;

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程