SQL 视图

目录

5-1 视图

一、视图和表

二、创建视图的方法

三、视图的使用方法

四、视图的两大限制

五、删除视图

5-2 子查询

一、子查询和视图

二、子查询的名称

三、标量子查询

四、标量子查询的书写位置

五、使用标量子查询时的注意事项


5-1 视图

一、视图和表

      1、 视图和表从SQL的角度来看,两者是相同的。两者的区别在于表中保存的是实际的数据,而视图中保存的是select语句。(视图本身并不存储数据)

      2、视图的优点

(1)由于视图无需保存数据,因此可以节省存储设备的容量。

表中存储的是实际的数据,而视图中保存的是从表中取出数据所使用的SELECT语句。

(2)可以将频繁使用的select语句保存成视图就不用每次都重新书写了。

应该将经常使用的SELECT语句做成视图。

(3)视图中的数据会随着原表的变化自动更新。视图归根到底就是select语句,所谓的参照视图就是执行select语句的意思。

二、创建视图的方法

创建视图需要使用CREATE VIEW语句。

语法如下:

CREATE VIEW 视图名称(<视图列名1> ,<视图列名2>,……) 
AS <SELECT语句>

举个栗子:做一个视图

CREATE ShohinSum(shohin_bunrui,cnt_shohin) ----视图的列名 
AS SELECT shohin_bunrui,COUNT(*) 
FROM Shohin ----视图定义中的主体(内容只是一条select语句) 
GROUP BY shohin_bunrui;

三、视图的使用方法

1、使用视图的查询

(1)首先执行定义视图的SELTCT语句

(2)根据得到的结果,再执行FROM子句中使用视图的SELECT语句

我们应该避免在视图的基础上创建视图,多重视图会降低SQL的性能。

四、视图的两大限制

1、定义视图时不能使用ORDER BY子句

因为视图和表一样,数据行是没用顺序的

2、对视图进行更新

大多数时候视图是不可以被更新的但也有些情况可以被更新

(1)select子句中未使用distinct

(2)from子句中只有一张表

(3)未使用group by子句

(4)未使用having子句

所以我们的视图和表需要同时进行更新,因此通过聚合得到的视图无法进行更新。(简单可以理解为视图是表的一部分,只更新视图并不会完全将表更新)

3、能够更新视图的情况

视图并不是通过聚合表之后所得到的

五、删除视图

删除视图需要使用 DROP VIEW语句

语法如下:

DROP VIEW 视图名称(<视图列名1>,<视图列名2>,……)

5-2 子查询

一些重点总结

1、子查询就是一次性的视图(SELECT语句)。与视图不同,子查询在SELECT语句执行完毕之后就会消失。

2、由于子查询需要命名,因此需要根据处理内容来指定恰当的名称。

3、标量子查询就是只能返回一行一列的子查询。

一、子查询和视图

子查询就是直接在FROM子句中使用定义视图的SELECT语句

举个栗子:

SELECT shohin_bunrui,cnt_shohin 
    FROM(SELECT shohin_bunrui,COUNT(*) AS cnt_shohin 
            FROM Shohin 
            GROUP BY shohin_bunrui)AS ShohinSum;

子查询作为内层查询为首先执行

二、子查询的名称

子查询必须设立名称,设立名称时需要使用AS关键字

三、标量子查询

1、什么时标量

标量子查询就是返回单一值的子查询。

2、在WHERE 子句中使用标量子查询

我们已经知道WHERE子句中不能使用AVG这样的聚合函数

举个栗子:

SELECT shohin_id,shohinmei,hanbai_tanka 
    FROM Shohin 
WHERE hanbai_tanka > AVG(hanbai_tanka);

这样的语句是无法实现的

但通过标量子查询(SELECT语句的嵌套)我们就可以实现

SELECT shohin_id,shohinmei,hanbai_tanka 
FROM Shohin 
WHERE hanbai_tanka > (SELECT AVG(hanbai_tanka) 
                        FROM Shohin);

四、标量子查询的书写位置

1、在SELECT子句中使用标量子查询

2、在HAVING子句中使用标量子查询

3、GROUP BY、HAVING、ORDER BY这些都可以使用标量子查询

五、使用标量子查询时的注意事项

该子查询绝对不能返回多行结果。如果返回了多行结果那么它就是一个简单的子查询了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jqh.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值