SQL View

2024 年 8 月 29 日 | 5 分钟阅读

SQL 提供了视图(VIEW)的概念,它可以隐藏数据的复杂性并限制对数据库的不必要访问。它允许用户只访问特定列,而不是表的全部数据。

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

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

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

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

创建 SQL 视图

您可以使用 CREATE VIEW 语句轻松创建结构化查询语言 (SQL) 中的视图。您可以从单个表或多个表创建视图。

从单个表创建视图的语法

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

从多个表创建视图的语法

您可以将表包含在 SELECT 语句中来从多个表中创建视图。

从单个表创建视图的示例

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

学生编号 (Student_ID)学生姓名 (Stu_Name)Stu_Subject学生分数 (Stu_Marks)
1001阿希尔 (Akhil)数学85
1002巴尔拉姆 (Balram)科学78
1003Bheem数学87
1004切坦 (Chetan)英文95
1005迪克莎 (Diksha)印地语99
1006拉曼 (Raman)电脑90
1007Sheetal科学68

表:Student_Details

假设您想创建一个包含 Stu_ID、Stu_Subject 和 Stu_Marks 的视图,这些学生的分数大于 85。对于这个问题,您需要键入以下查询:

输出

学生编号 (Student_ID)Stu_Subject学生分数 (Stu_Marks)
1001数学85
1003数学87
1004英文95
1005印地语99
1006电脑90

视图:Student_View

从多个表创建视图的示例

让我们考虑两个表:Student_DetailsTeacher_Details。Student_Details 表包含 Stu_ID、Stu_Name、Stu_Subject 和 Stu_Marks 列。Teacher_Details 表包含 Teacher_ID、Teacher_Name、Teacher_Subject、Teacher_City 列。Student_Details 和 Teacher_Details 的数据如下表所示:

学生编号 (Student_ID)学生姓名 (Stu_Name)Stu_Subject学生分数 (Stu_Marks)
1001阿希尔 (Akhil)数学85
1002巴尔拉姆 (Balram)科学78
1003Bheem数学87
1004切坦 (Chetan)英文95
1005迪克莎 (Diksha)印地语99
1006拉曼 (Raman)电脑90
1007Sheetal科学68

表:Student_Details

Teacher_IDTeacher_NameTeacher_SubjectTeacher_City
2001Arun数学Gurgaon
2002马诺吉科学德里
2003丽娜SSTNoida
2004Parul英文Gurgaon
2005Nishi印地语Noida
2006Anuj电脑德里
2007Ram体育教育德里

表:Teacher_Details

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

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

输出

学生编号 (Student_ID)学生姓名 (Stu_Name)Teacher_IDTeacher_Subject
1001阿希尔 (Akhil)2001数学
1002巴尔拉姆 (Balram)2002科学
1004切坦 (Chetan)2004英文
1005迪克莎 (Diksha)2005印地语
1006拉曼 (Raman)2006电脑

视图:Student_Teacher_View

更新 SQL 视图

我们也可以修改现有数据并在结构化查询语言 (SQL) 的视图中插入新记录。SQL 中的视图仅在视图遵循以下条件时才能被修改:

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

更新视图的语法

更新视图的示例

如果我们想更新上述 Student_View 并从 Student 表中添加 Stu_Name 属性到视图中,您需要键入以下 SQL REPLACE 查询:

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

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

输出

学生编号 (Student_ID)学生姓名 (Stu_Name)Stu_Subject学生分数 (Stu_Marks)
1001阿希尔 (Akhil)数学85
1003Bheem数学87

视图:Student_View

向现有视图插入新行

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

向视图插入新记录的示例

假设您想在 Student_View 中插入一名新学生的信息,那么您需要用 SQL 编写以下查询:

现在,您可以使用以下查询检查新记录是否已插入到 Student_View 中:

输出

学生编号 (Student_ID)Stu_Subject学生分数 (Stu_Marks)
1001数学85
1003数学87
1004英文95
1005印地语99
1006电脑90
1007印地语89

视图:Student_View

从视图删除现有行

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

从视图删除记录的示例

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

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

输出

学生编号 (Student_ID)Stu_Subject学生分数 (Stu_Marks)
1004英文95
1005印地语99
1006电脑90
1007印地语89

视图:Student_View

删除视图

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

删除视图的示例

假设您想删除上述 Student_View,那么您需要键入以下结构化查询语言 (SQL) 查询:


下一个主题SQL 中的约束