SQL如何使用及操作视图,创建视图要注意什么
Admin 2022-09-27 群英技术资讯 365 次浏览
视图无非就是存储在数据库中并具有名字的 SQL 语句,或者说是以预定义的 SQL 查询的形式存在的数据表的成分。
视图可以包含表中的所有列,或者仅包含选定的列。视图可以创建自一个或者多个表,这取决于创建该视图的 SQL 语句的写法。
视图,一种虚拟的表,允许用户执行以下操作:
在 SQL 中,视图是基于 SQL 语句的结果集的可视化表。
数据库视图由 CREATE VIEW 语句创建。视图可以创建自单个表、多个表或者其他视图。
视图中的字段是一个或多个数据库中真实表中的字段。
在使用时视图可以被视为一个“虚拟表”。
要创建视图的话,用户必须有适当的系统权限。具体需要何种权限随数据库系统实现的不同而不同。
CREATE VIEW 语句的基本语法如下所示:
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
和普通的 SQL SELECT 查询一样,你可以在上面的 SELECT 语句中包含多个数据表。
注释:视图总是显示最新数据!每当用户查询视图时,数据库引擎就使用视图的 SQL 语句重新构建数据。
考虑 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 表的顾客的名字(name)和年龄(age):
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 |
+----------+-----+
下面是由 CUSTOMERS 表创建视图的例子。该视图包含来自 CUSTOMERS 表中年龄(age)为25的顾客的ADDRESS信息:
SQL > CREATE VIEW CUSTOMERS_ADDRESS AS
SELECT ADDRESS
FROM CUSTOMERS;
WHERE AGE=25;
我们可以像这样查询上面这个 CUSTOMERS_ADDRESS 视图:
SQL > SELECT * FROM CUSTOMERS_ADDRESS;
我们也可以向查询添加条件。现在,我们仅仅需要查看 "Delhi" 的数据:
SELECT * FROM CUSTOMERS_ADDRESS
WHERE ADDRESS='Delhi';
WITH CHECK OPTION 是 CREATE VIEW 语句的一个可选项。
WITH CHECK OPTION 用于保证所有的 UPDATE 和 INSERT 语句都满足视图定义中的条件。
如果不能满足这些条件,UPDATE 或 INSERT 就会返回错误。
下面的例子创建的也是 CUSTOMERS_VIEW 视图,不过这次 WITH CHECK OPTION 是打开的:
CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;
这里 WITH CHECK OPTION 使得视图拒绝任何 AGE 字段为 NULL 的条目,因为视图的定义中,AGE 字段不能为空。
在SQL视图上也可以使用修改数据的DML语句,如 INSERT、UPDATE和DELETE。
视图可以在特定的情况下更新:
如果视图满足以上所有的条件,该视图就可以被更新。下面的例子中,Ramesh 的年龄被更新了:
SQL > UPDATE CUSTOMERS_VIEW
SET AGE = 35
WHERE name='Ramesh';
最终更新的还是原始数据表,只是其结果反应在了视图上。现在查询原始数据表,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 命令)更新视图所遵循的规则相同。
这里我们不能向 CUSTOMERS_VIEW 视图中添加新行,因为该视图没有包含原始数据表中所有 NOT NULL 的列。否则的话,你就可以像在数据表中插入新行一样,向视图中插入新行。
句法:
INSERT INTO view_name
VALUES (value1, value2, value3, ...);
视图中的数据行可以被删除。删除数据行与更新视图和向视图中插入新行遵循相同的规则。
下面的例子将删除 CUSTOMERS_VIEW 视图中 AGE=22 的数据行:
SQL > DELETE FROM CUSTOMERS_VIEW
WHERE age = 22;
该语句最终会将原始数据表中对应的数据行删除,只不过其结果反应在了视图上。现在查询原始数据表,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;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了SQL Server2019数据库之简单子查询的具有方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍一些Python简单的sql查询语句,同时也和大家一起来探讨select语句和多种查询方式,感兴趣的朋友不妨跟随小编一起来了解一下sql查询语句。
SQL的JOIN类型有哪些?JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。文本主要给大家介绍SQL中JOIN的几种类型的区别是什么,感兴趣的朋友就继续往下看吧。
SQL Server如何判断表是否存在?我们想要判断数据表是否存在有两种方法,下文有示例供大家参考,此外本文还介绍了如何临时表是否存在等等,下面我们来详细了解看看吧。
对于一些新手来说,sql存储过程是比较难理解的知识点之一,也是学习SQL server需要掌握的内容,对下本文给大家分享一些sql存储过程的示例,希望对帮助大家学习和理解sql存储过程有帮助。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008