SQL基础学习5
来源:互联网 发布:java oa项目源代码 编辑:程序博客网 时间:2024/05/29 16:45
视图
视图与表:从SQL角度来看视图就是一张表
视图与表的唯一区别:是否保存了实际的数据。数据库中的数据实际上会被保存到计算机的存储设备中,但使用视图时并不会将数据保存到存储设备之中,也不会将数据保存到其他任何地方。实际上是他保存的是SELECT语句。
表中存储的是实际数据,而视图中保存的是从表中取出数据所使用的SELECT语句。
视图的优点:1.无需保存数据,可以节省存储设备的容量;2.可以将频繁使用的SELECT语句保存成视图,这样一来就不用每次都重新书写了。
创建视图的方法:
CREATE VIEW 视图名称(视图列名1,视图列名2,...)ASSELECT语句P.S:SELECT语句需要书写在AS关键字之后(AS关键字不可省略);SELECT语句中列的排列顺序和视图中列的排列顺序相同
CREATE VIEW ShopSum(name,cnt_name)ASSELECT name,COUNT(*)FROM ShopGROUP BY name;解释:创建一个ShopSum视图,其数据来于Shop表按name进行分组计数的结果
视图的使用与表一样:
SELECT name,cnt_nameFROM ShopSum;
1.首先执行定义视图的SELECT语句;2.根据得到的结果,再执行在FROM子句中使用视图的SELECT语句。
多重视图:尽量避免,因为它会降低SQL的性能
--多重视图的创建CREATE VIEW ShopSumJim(name,cnt_name)ASSELECT name,cnt_name--以视图为基础创建视图FROM ShopSumWHERE name='筷子';
1.定义视图时不能使用ORDER BY子句(视图和表一样,数据行都是没有顺序的)
2.当定义视图的SELECT语句满足以下某些条件时,可以对视图进行更新(更新包括:INSERT、DELETE、UPDATE)。条件如下:SELECT语句中未使用DISTINCT;FROM只有一张表;未使用GROUP BY子句;未使用HAVING子句
删除视图:
--删除视图的一般语法DROP VIEW 视图名称 (视图列名1,视图列名2,视图列名3,...);
子查询
子查询和视图:
子查询:将用来定义视图的SELECT语句直接用于FROM子句当中。子查询的特点概括起来就是一张一次性视图
--创建根据商品名统计商品数据的视图CREATE VIEW ShopSum(name,cnt_name)ASSELECT name,COUNT(*)FROM ShopGROUP BY name;--确认视图是否已经创建成功SELECT name,cnt_nameFROM ShopSum;等价查询结果的子查询
SELECT name,cnt_nameFROM (SELECT name,COUNT(*) AS cnt_name FROM Shop GROUP BY name) AS ShopSum;
解释:()部分即为子查询,即,将用来定义视图 的SELECT子句直接作用于FROM子句当中;子查询作为内层查询会首先执行;子查询的层数原则上没有限制,但应尽量避免使用多重嵌套的子查询
子查询的名称:
原则上子查询必须使用AS关键字设定名称,此关键字有时可省略
标量子查询:必须而且只能返回1行1列的结果,其返回值可以用在=或者< >这样需要单一值的比较运算符之中
SELECT name,priceFROM ShopWHERE price >(SELECT AVG(price) FROM Shop);解释:从Shop表中选出价格高于平均价格的商品信息;由于WHERE子句中不能使用聚合函数,所以利用标量子查询 SELECT AVG(price) FROM Shop来实现
标量子查询的书写位置:
并不仅仅局限于WHERE子句中,能够使用常数或者列名的地方,无论是SELECT子句、GROUP BY 子句、HAVING子句,还是ORDER BY子句,几乎所有地方都可用。
使用标量子查询时的注意事项:该子查询绝对不能返回多行结果
关联子查询
普通子查询和关联子查询的区别
SELECT name,priceFROM Shop AS S1WHERE price>(SELECT AVG(price)FROM Shop AS S2 WHERE S1.name=S2.name --关键语句:关联条件GROUP BY name);解释:对表Shop按name分组,选出每组中price大于每组的平均price的商品信息
在细分的组内进行比较时,需要使用关联子查询
关联子查询也是用来对集合进行切分的:关联子查询实际只能返回1行结果
结合条件/关联条件一定要写在子查询中:因为关联名称的作用域
- SQL基础学习5
- SQL学习 之SQL基础
- 零基础学习sql(5)---索引
- PL/SQL基础学习
- sql基础学习
- sql 基础学习
- PL\SQL基础学习
- SQL学习基础笔记
- SQL学习基础
- sql基础学习
- SQL基础学习
- SQL学习语法基础
- sql基础学习
- 基础SQL语句学习
- SQL基础学习1
- SQL基础学习2
- SQL基础学习3
- SQL基础学习4
- ibm ds5020 for aix storage manager .
- AdapterViewFlipper 和 StackView的使用
- [java][log4j]Log4j每天、每小时、每分钟定时生成日志文件
- 如何逃脱老鼠奔跑试的工作?
- struts+Hibernate小程序的坑我
- SQL基础学习5
- cordova 打包的app 如何 打开微信或百度地图
- 常用SQL语句
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--防御塔(七)之士兵
- Android Framework tips
- Linux IPC实 --共享内存/内存映射
- 玩转play framework ( by quqi99 )
- android源码定制之--入门篇--android源码定制要点
- Struts2 json jQuery ajax 的集成配置与使用及 demo 演示源码示范