SQL - 使用视图

2025-12-21 20:47:29

SQL 教程

SQL 教程

SQL - 概述

RDBMS

SQL - RDBMS 概念

SQL - NOT NULL(非空) 约束

SQL - DEFAULT(默认)约束

SQL - UNIQUE(唯一)约束

SQL - Primary Key(主键)

SQL - Foreign Key(外键)

SQL - CHECK 约束

SQL - INDEX(索引)约束

SQL - 第一范式 (1NF)

SQL - 第二范式 (2NF)

SQL - 第三范式 (3NF)

SQL - RDBMS 数据库

SQL 操作

SQL - 语法

SQL - 数据类型

SQL - 表达式

SQL - 创建数据库

SQL - 删除或删除数据库

SQL - 选择数据库,USE 语句

SQL - 创建表

SQL - 删除或删除表

SQL - (INSERT)插入查询

SQL - (SELECT)选择查询

SQL - WHERE 子句

SQL - AND 和 OR 合取运算符

SQL - UPDATE(更新)查询

SQL - DELETE(删除)查询

SQL - LIKE 子句

SQL - TOP、LIMIT 或 ROWNUM 子句

SQL - ORDER BY 子句

SQL - GROUP BY 子句

SQL - Distinct 关键字

SQL - 排序结果

SQL 高级

SQL - 约束

SQL - 使用连接(Join)

SQL - INNER JOINS

SQL - LEFT JOINS

SQL - RIGHT JOINS

SQL - FULL JOINS

SQL - SELF JOINS

SQL - CARTESIAN or CROSS JOINS

SQL - UNIONS 字句

SQL - INTERSECT 子句

SQL - EXCEPT 子句

SQL - NULL

SQL - 别名语法

SQL - 索引

SQL - ALTER TABLE 命令

SQL - TRUNCATE TABLE 命令

SQL - 使用视图

SQL - Having 子句

SQL - 事务

SQL - 通配符运算符

SQL - 临时表

SQL - 克隆表

SQL - 子查询

SQL - 使用序列

SQL - 去重

SQL - 注入

SQL - 日期函数

上一节: SQL - TRUNCATE TABLE 命令

上一节

下一节: SQL - Having 子句

下一节

SQL - 使用视图

简述

视图只不过是存储在具有关联名称的数据库中的 SQL 语句。视图实际上是预定义 SQL 查询形式的表的组合。

视图可以包含表的所有行或从表中选择行。可以从一个或多个表创建视图,这取决于编写的 SQL 查询来创建视图。

视图是一种虚拟表,允许用户执行以下操作 -

以用户或用户类别认为自然或直观的方式构造数据。

以用户可以看到和(有时)准确修改他们需要的内容的方式限制对数据的访问。

汇总各种表格中的数据,这些表格可用于生成报告。

创建视图

数据库视图是使用CREATE VIEW陈述。可以从单个表、多个表或另一个视图创建视图。

要创建视图,用户必须根据具体实现具有适当的系统权限。

基础的CREATE VIEW语法如下 -

CREATE VIEW view_name AS

SELECT column1, column2.....

FROM table_name

WHERE [condition];

您可以在 SELECT 语句中包含多个表,其方式与在普通 SQL SELECT 查询中使用它们的方式相似。

例子

考虑具有以下记录的 CUSTOMERS 表 -

+----+----------+-----+-----------+----------+

| ID | NAME | AGE | ADDRESS | SALARY |

+----+----------+-----+-----------+----------+

| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |

| 2 | Khilan | 25 | Delhi | 1500.00 |

| 3 | kaushik | 23 | Kota | 2000.00 |

| 4 | Chaitali | 25 | Mumbai | 6500.00 |

| 5 | Hardik | 27 | Bhopal | 8500.00 |

| 6 | Komal | 22 | MP | 4500.00 |

| 7 | Muffy | 24 | Indore | 10000.00 |

+----+----------+-----+-----------+----------+

以下是从 CUSTOMERS 表创建视图的示例。此视图将用于获取 CUSTOMERS 表中的客户姓名和年龄。

SQL > CREATE VIEW CUSTOMERS_VIEW AS

SELECT name, age

FROM CUSTOMERS;

现在,您可以以与查询实际表类似的方式查询 CUSTOMERS_VIEW。以下是相同的示例。

SQL > SELECT * FROM CUSTOMERS_VIEW;

这将产生以下结果。

+----------+-----+

| name | age |

+----------+-----+

| Ramesh | 32 |

| Khilan | 25 |

| kaushik | 23 |

| Chaitali | 25 |

| Hardik | 27 |

| Komal | 22 |

| Muffy | 24 |

+----------+-----+

WITH CHECK 选项

WITH CHECK OPTION 是 CREATE VIEW 语句选项。WITH CHECK OPTION 的目的是确保所有 UPDATE 和 INSERT 都满足视图定义中的条件。

如果它们不满足条件,则 UPDATE 或 INSERT 返回错误。

以下代码块具有使用 WITH CHECK OPTION 创建相同视图 CUSTOMERS_VIEW 的示例。

CREATE VIEW CUSTOMERS_VIEW AS

SELECT name, age

FROM CUSTOMERS

WHERE age 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。

计算的列可能不会更新。

基表中的所有 NOT NULL 列都必须包含在视图中,INSERT 查询才能正常工作。

因此,如果视图满足上述所有规则,那么您可以更新该视图。以下代码块有一个更新 Ramesh 年龄的示例。

SQL > UPDATE CUSTOMERS_VIEW

SET AGE = 35

WHERE name = 'Ramesh';

这最终会更新基表 CUSTOMERS,同样会反映在视图本身中。现在,尝试查询基表,SELECT 语句将产生以下结果。

+----+----------+-----+-----------+----------+

| ID | NAME | AGE | ADDRESS | SALARY |

+----+----------+-----+-----------+----------+

| 1 | Ramesh | 35 | Ahmedabad | 2000.00 |

| 2 | Khilan | 25 | Delhi | 1500.00 |

| 3 | kaushik | 23 | Kota | 2000.00 |

| 4 | Chaitali | 25 | Mumbai | 6500.00 |

| 5 | Hardik | 27 | Bhopal | 8500.00 |

| 6 | Komal | 22 | MP | 4500.00 |

| 7 | Muffy | 24 | Indore | 10000.00 |

+----+----------+-----+-----------+----------+

在视图中插入行

数据行可以插入到视图中。适用于 UPDATE 命令的相同规则也适用于 INSERT 命令。

在这里,我们不能在 CUSTOMERS_VIEW 中插入行,因为我们没有在此视图中包含所有 NOT NULL 列,否则您可以在视图中插入行,就像在表中插入它们一样。

将行删除到视图中

可以从视图中删除数据行。适用于 UPDATE 和 INSERT 命令的相同规则适用于 DELETE 命令。

以下是删除 AGE = 22 的记录的示例。

SQL > DELETE FROM CUSTOMERS_VIEW

WHERE age = 22;

这最终会从基表 CUSTOMERS 中删除一行,同样会反映在视图本身中。现在,尝试查询基表,SELECT 语句将产生以下结果。

+----+----------+-----+-----------+----------+

| ID | NAME | AGE | ADDRESS | SALARY |

+----+----------+-----+-----------+----------+

| 1 | Ramesh | 35 | Ahmedabad | 2000.00 |

| 2 | Khilan | 25 | Delhi | 1500.00 |

| 3 | kaushik | 23 | Kota | 2000.00 |

| 4 | Chaitali | 25 | Mumbai | 6500.00 |

| 5 | Hardik | 27 | Bhopal | 8500.00 |

| 7 | Muffy | 24 | Indore | 10000.00 |

+----+----------+-----+-----------+----------+

删除视图

显然,在您有视图的地方,如果不再需要视图,您需要一种方法来删除它。语法非常简单,如下所示 -

DROP VIEW view_name;

以下是从 CUSTOMERS 表中删除 CUSTOMERS_VIEW 的示例。

DROP VIEW CUSTOMERS_VIEW;

上一节: SQL - TRUNCATE TABLE 命令

上一节

下一节: SQL - Having 子句

下一节

查看笔记 分享笔记

笔记内容:

称呼:

Email:

站点:

分享笔记 重置

分类导航

前端

Ajax 教程

Angular 教程

Aurelia 教程

Bootstrap 教程

ChartJS 教程

CSS 教程

ES6 教程

FontAwesome 教程

HTML 教程

HTML 字符集 教程

HTML 游戏 教程

JavaScript 教程

jQuery 教程

Less 教程

React 教程

Sass 教程

Stylus 教程

TypeScript 教程

Unity 教程

Vue.js 教程

WebAssembly 教程

XAML 教程

颜色 教程

服务端

C# 教程

C++ 教程

COBOL 教程

C语言 教程

Fortran 教程

Go 教程

Groovy 教程

Java 教程

JSP 教程

JVM 教程

Kotlin 教程

Lisp 教程

Lua 教程

Node.js 教程

Pascal 教程

Perl 教程

PHP 教程

Python 教程

Python 3 教程

Ruby 教程

Rust 教程

Scala 教程

Spring 教程

Spring Boot 教程

Spring Cloud 教程

VB.Net 教程

移动端

Android 教程

IOS 教程

Objective-C 教程

React Native 教程

Swift 教程

小程序 教程

数据库

Access 教程

DB2 教程

Mariadb 教程

Memcached 教程

MongoDB 教程

MySQL 教程

Neo4j 教程

PL/SQL 教程

PostgreSQL 教程

Redis 教程

SQL 教程

SQL Server 教程

SQLite 教程

T-SQL 教程

数据格式

Jackson 教程

JSON 教程

SVG 教程

XML 教程

开发工具

ActiveMQ 教程

Ant 教程

Apache HttpClient 教程

Apache POI PPT 教程

AWS 教程

Docker 教程

ElasticSearch 教程

ExpressJS 教程

GIT 教程

GitLab 教程

Google Maps 教程

Gradle 教程

Java NIO 教程

JavaFX 教程

JavaMail 教程

JDBC 教程

jMeter 教程

JPA 教程

jsoup 教程

Junit 教程

KoaJS 教程

Kubernetes 教程

Log4j 教程

Logstash 教程

Lucene 教程

Makefile 教程

Maven 教程

RESTful 教程

Sed 教程

SEO 教程

Servlet 教程

SLF4J 教程

Socket.IO 教程

Struts 教程

SVN 教程

TestNG 教程

UML 教程

UNIX / LINUX 教程

WebSocket 教程

WPF 教程

xStream 教程

区块链 教程

数据处理

Flink 教程

Flume 教程

Hadoop 教程

Hbase 教程

Hive 教程

Kafka 教程

Kibana 教程

MapReduce 教程

MATLAB 教程

MyBatis 教程

Pig 教程

R语言 教程

Solr 教程

Spark 教程

Storm 教程

Zookeeper 教程

大数据分析 教程

数据仓库 教程

数据挖掘 教程

计算机基础

HTTP 教程

IPv4 教程

IPv6 教程

Ubantu 教程

WebServices 教程

嵌入式系统 教程

操作系统 教程

数据结构和算法 教程

汇编语言 教程

物联网 教程

电子电路基础 教程

编译器设计 教程

网站开发 教程

计算机 教程

计算机基础 教程

计算机网络 教程

设计模式 教程

AI

CNTK 教程

Keras 教程

PyTorch 教程

TensorFlow 教程

人工智能 教程

机器学习 教程

Python 技术

Django 教程

Flask 教程

NumPy 教程

Pandas 教程

Pillow 教程

PyGTK 教程

PyQt5 教程

PySpark 教程

pytest 教程

Python -数据科学 教程

Python MySQL 教程

Python 取证 教程

Python 数据结构 教程

Python 文本处理 教程

Python 网络编程 教程

Python 网页抓取 教程

Python 设计模式 教程

RxPY 教程

SciPy 教程

Seaborn 教程

SymPy 教程

wxPython 教程

框架

Laravel 教程

Web 图标Icon 教程

Web2py 教程

WebGL 教程

WebRTC 教程

WordPress 教程

Yii 教程

Zend Framework 教程

SAP

Crystal Reports 教程