📜  SQL 中简单视图和复杂视图的区别(1)

📅  最后修改于: 2023-12-03 15:35:05.833000             🧑  作者: Mango

SQL 中简单视图和复杂视图的区别

简单视图

简单视图是基于单个 SELECT 语句的虚拟表。它由已存在的表或其他视图的一部分选择出来的行组成。可以将简单视图看作是一个预定义的 SELECT 语句,该语句可以使用与基础表相同的查询语句。

特点
  • 简单视图基于单个 SELECT 语句,不包含任何聚合函数或 GROUP BY 子句。
  • 对简单视图进行 INSERT、UPDATE、DELETE 操作时,相当于对基础表进行了操作。
  • 简单视图没有自己的存储空间,只是一个 SELECT 语句的命名副本,其数据仍然存储在基础表中。
创建
CREATE VIEW view_name AS SELECT column1, column2, column3 FROM table_name WHERE condition;
示例

假设有一个名为 students 的表包含以下数据:

| id | name | age | gender | | --- | --- | --- | --- | | 1 | Tom | 18 | M | | 2 | Jane | 19 | F | | 3 | Mike | 20 | M |

我们可以基于该表创建一个简单视图 student_view,只包含 namegender 两个字段的数据。

CREATE VIEW student_view AS SELECT name, gender FROM students;
复杂视图

复杂视图是基于多个 SELECT 语句联结而成的虚拟表。它由多个 SELECT 语句组成,每个 SELECT 语句可以使用普通表或其他视图作为其输入。

特点
  • 复杂视图可以基于多个表或其他视图联结而成。
  • 对复杂视图进行 INSERT、UPDATE、DELETE 操作时,只能在 WHERE 子句中使用单个表或单个视图。
  • 复杂视图可以包含聚合函数、GROUP BY 子句和 HAVING 子句。
创建
CREATE VIEW view_name AS SELECT column1, column2, column3 FROM table1 JOIN table2 ON condition WHERE condition GROUP BY column1 HAVING condition ORDER BY column1;
示例

假设有两个名为 studentsscores 的表,分别包含以下数据:

students 表:

| id | name | age | gender | | --- | --- | --- | --- | | 1 | Tom | 18 | M | | 2 | Jane | 19 | F | | 3 | Mike | 20 | M |

scores 表:

| id | subject | score | | --- | --- | --- | | 1 | Math | 80 | | 1 | English | 90 | | 2 | Math | 95 | | 2 | English | 85 |

我们可以基于这两个表联结创建一个复杂视图 score_view,包含每个学生的姓名和总成绩。

CREATE VIEW score_view AS 
SELECT students.name, SUM(scores.score) as total_score 
FROM students JOIN scores ON students.id = scores.id 
GROUP BY students.name;
总结

简单视图和复杂视图在 SQL 中都扮演着很重要的角色,它们可以方便地维护和管理数据。但是需要注意的是,对于复杂视图的更新操作可能会对基础表造成影响,因此需要谨慎使用。