SQL 视图 (Views) 简介
SQL 视图是一个基于 SELECT 查询结果集创建的虚拟表。它并不在物理上存储数据,而是动态地显示底层表中的数据。视图可以帮助我们简化复杂的查询,增强数据安全性,并以更整洁、自定义的方式呈现数据。
示例: 首先,我们将创建一个演示用的 SQL 数据库和表,以便在此基础上演示视图的操作。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251117121157935690/studentdetails.png">studentdetails
查询语句:
CREATE VIEW StudentView AS
SELECT NAME, ADDRESS
FROM StudentDetails;
SELECT * FROM StudentView;
输出结果:
在 SQL 中创建视图
我们可以使用 CREATE VIEW 语句来创建视图。视图可以基于单个表,也可以基于多个表。
语法:
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE condition;
- view_name: 视图的名称
- table_name: 基表的名称
- condition: 筛选行的条件
示例 1:基于单个表创建简单视图
首先,我们创建一个演示用的 SQL 数据库和表,以便在此基础上使用视图命令。
在这个示例中,我们从 INLINECODE0cde0fb5 表创建一个名为 INLINECODEe2fc8b61 的视图。
查询语句:
CREATE VIEW DetailsView AS
SELECT NAME, ADDRESS
FROM StudentDetails
WHERE S_ID < 5;
使用以下查询来检索该视图中的数据:
SELECT * FROM DetailsView;
输出结果:
!Liam
示例 2:基于多个表创建视图
在这个示例中,我们创建一个名为 INLINECODEfddc3d9b 的视图,它结合了 INLINECODEf03cf74d 和 StudentMarks 两个表中的数据。要从多个表创建视图,只需在 SELECT 语句中包含多个表即可。
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251117145328887448/Studentmarks.png">Studentmarks
查询语句:
CREATE VIEW MarksView AS
SELECT StudentDetails.NAME, StudentDetails.ADDRESS, StudentMarks.MARKS
FROM StudentDetails, StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;
要显示 MarksView 视图的数据:
SELECT * FROM MarksView;
输出结果:
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20251117150057471130/Marksview.png">Marksview
管理视图
以下是在 SQL 中管理视图的一些常用操作:
1. 列出数据库中的所有视图
我们可以使用 SHOW FULL TABLES 语句或通过查询 information_schema 表来列出数据库中的所有视图。
USE "database_name";
SHOW FULL TABLES WHERE table_type LIKE "%VIEW";
使用 information_schema
SELECT table_name
FROM information_schema.views
WHERE table_schema = ‘database_name‘;
OR
SELECT table_schema, table_name, view_definition
FROM information_schema.views
WHERE table_schema = ‘database_name‘;
2. 删除视图
SQL 允许我们删除现有的视图。我们可以使用 DROP 语句来删除视图。
语法:
DROP VIEW view_name;
示例: 在这个示例中,我们将删除视图 MarksView。
DROP VIEW MarksView;
3. 更新视图定义
如果我们想更新视图中的现有数据,可以使用 UPDATE 语句。
UPDATE view_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
如果我们想在不影响数据的情况下更新视图的定义(结构),可以使用 CREATE OR REPLACE VIEW 语句。例如,让我们向 INLINECODE7c085e19 视图添加 INLINECODE7eadd076 列:
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
注意: 并非所有的视图都可以使用 UPDATE 语句进行更新。
更新 SQL 视图的规则:
要更新视图,必须满足某些条件。如果其中任何条件未被满足,则无法更新该视图。
- 用于创建视图的 SELECT 语句不应包含 GROUP BY 子句或 ORDER BY 子句。
- SELECT 语句不应包含 DISTINCT 关键字。
- 视图应包含所有 NOT NULL 值。
- 视图不应使用嵌套查询或复杂查询来创建。
- 视图应基于单个表创建。如果视图是使用多个表创建的,则我们将被禁止更新该视图。
视图的高级应用技巧
以下是一些使用 SQL 视图的高级方法: