SQL 视图(Views)
来源:互联网 发布:工业工程研究生知乎 编辑:程序博客网 时间:2024/06/06 01:10
视图是可视化的表。
本章讲解如何创建、更新和删除视图。
SQL CREATE VIEW 语句
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
SQL CREATE VIEW 语法
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。
SQL CREATE VIEW 实例
样本数据库 Northwind 拥有一些被默认安装的视图。
视图 "Current Product List" 会从 "Products" 表列出所有正在使用的产品(未停产的产品)。这个视图使用下面的 SQL 创建:
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
我们可以像这样查询上面这个视图:
Northwind 样本数据库的另一个视图会选取 "Products" 表中所有单位价格高于平均单位价格的产品:
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)
我们可以像这样查询上面这个视图:
Northwind 样本数据库的另一个视图会计算在 1997 年每个种类的销售总数。请注意,这个视图会从另一个名为 "Product Sales for 1997" 的视图那里选取数据:
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName
我们可以像这样查询上面这个视图:
我们也可以向查询添加条件。现在,我们仅仅需要查看 "Beverages" 类的销售总数:
WHERE CategoryName='Beverages'
SQL 更新视图
您可以使用下面的语法来更新视图:
SQL CREATE OR REPLACE VIEW 语法
SELECT column_name(s)
FROM table_name
WHERE condition
现在,我们希望向 "Current Product List" 视图添加 "Category" 列。我们将通过下列 SQL 更新视图:
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
SQL 撤销视图
您可以通过 DROP VIEW 命令来删除视图。
SQL DROP VIEW 语法
sql之浅谈视图的作用
【数据库】☆★sql之浅谈视图的作用
在一个项目的实际开发过程中牵涉到复杂业务的时候,我们不可避免的需要使用中间表来进行数据连接,有的同学就说了,我可以采用Hibernate进行主外键进行关联啊?多对多,多对一,一对一,等,采用主外键关联在数据的操作过程中具有很强的耦合性,尤其对于需要经常删改数据表而言,我们是不建议采用主外键关联这种模式,那么,如果我们采用中间表的话,当数据过大在性能上又面临严峻考验,sql视图的出现,在解决中间表的业务逻辑上是不错的选择。ok,首先我们了解什么是视图?
1、视图是表?没错,但是是一张虚拟表,视图的字段是由我们自定义的,视图只供查询,数据不可更改,查询数据来源于我们建立的实体表。
2、使用视图的优势?视图可以将多个复杂关联表,提取出我们需要的信息,优化查询速度。
如何创建视图?
我们先建立三张表;如下:
这个是典型的一对多和一对一的关系,那么,假如每张表的数据都在一万条数据以上,现在查询在潢高上学的学生姓名?
首先,我们分析一下,在潢高上学?首先是一个高中,那么我们会有一条Sql where school='潢高',
查询出一个List,得到gradeids,然后再到grade中根据gradeids查询这么多grades对应的studentids,在使用这些studentsid查询出students循环最后得到name?
是不是很累赘?查询是不是很影响性能?
观察得知,这三张表每两张表之间都是通过id进行关联的,如果我们通过id将三张表组成一张表,是不是很方便?
我们来关联学校表和年级表:这个年级ID我们不要,ok?
1select
s.id
as
schoolId,s.school
as
schoolName,s.gradeid
as
gradeid,g.grade
as
gradeName,g.studentid
as
studentid
from
school s,grade g
where
s.gradeid=g.id;
那么我们再关联上学生表,学生表的id等于年级表的studentid ok?
12SELECT
s.id
as
schoolId,s.school
as
schoolName,s.gradeid
as
gradeid,g.grade
as
gradeName,g.studentid
as
studentid ,t.`
name
`
as
studentName,t.age
as
studentAge
from
school s,grade g,student t
where
s.gradeid=g.id
and
g.studentid=t.id;
ok,到了这里?我们再看运行结果?
那么我们想查询在潢高上学的学生姓名,where schoolName='潢高',获取的list循环得到Object,通过Object.getStudentName,就可以了?
所以需要将查询到的结果,建立为一张虚拟表,这样才能操作,通过这个create view 视图名 as 命令建立:
意思就是将查询结果创建为名称为table_sgt的一张虚拟表:
1create
view
table_sgt
as
(
select
s.id
as
schoolId,s.school
as
schoolName,s.gradeid
as
gradeid,g.grade
as
gradeName,g.studentid
as
studentid ,t.`
name
`
as
studentName,t.age
as
studentAge
from
school s,grade g,student t
where
s.gradeid=g.id
and
g.studentid=t.id);
我们在使用视图的时候,需要把它看做为一张表,建立一张实体表需要做的步骤,视图也都需要(例如,实例化,配置映射文件,对象的属性get,set方法)
注意视图所查询出来的数据只能进行查看,不能增删改!
例子数据库为Mysql5.5,工具Navicat for MySQL
ok,有问题请举手?
- SQL 视图(Views)
- 项目视图组(Item Views)
- Django学习8:视图(views)
- Sql Server每日一练-可更新视图(Updateble views)
- 序列视图Series Views
- Swipe Views(滑动视图)
- 滑动视图 Swipe Views
- Yii2.0 视图 views
- mongodb 视图Views
- 【视图】ABAP Views
- 千与千寻django(六)---通用视图(Generic views)
- openerp的继承视图(Inheritance in Views)
- IOS 7 过渡之 Content Views (视图内容)
- IOS 7 过渡之 Content Views (视图内容)
- 基于类的通用视图(Class-based generic views)
- PostgreSQL数据库Dig4 ——视图(Views)
- Django框架MTV架构之 Views(视图)
- Django框架全面讲解 -- Django Views(视图函数)
- CentOS6.0+Hadoop2.6.0搭建完全分布式环境
- 这些年写过的排序算法
- leetcode--Maximum Subarray
- Cocostido v2.3 程序使用示例
- 【iOS开发系列】颜色渐变
- SQL 视图(Views)
- iOS6下UITextField退格变清空问题的解决方法
- 蓝桥杯 排序
- tableView 使用注意事项:一个tableView展示不同的cell时复用,以及数据更新
- Unity3D AssetStore下载的文件保存位置
- Hello_JNI
- genymotion模拟器安装出现的问题及解决方案
- Python -- 使用SMTP发送邮件
- Myeclipse 闪退后无法打开Tomcat