SQL入门学习4-复杂查询
5-1 视图
视图和表
视图和表的区别只有一个是否保存了实际的数据
使用INSERT和SELECT实际上就是从存储设备中读取数据,各种计算后,将数据呈现给用户。
视图不会将数据保存在存储设备中。实际上,视图保存的是SELECT
语句视图会在内部执行该SELECT
并创建出一张临时表。
视图的优点
- 无需保存数据,节省存储设备的容量。
- 可以将频繁使用的SELECT保存成视图,这样就不用每次都重新书写了。
创建视图
创建视图,要使用CREATE VIEW
语句
语法:
CREATE VIEW 视图名称 (<视图列表1>,<视图列表2>,……)
AS
<SELECT语句>
注意:
- SELECT语句需要书写在AS关键字之后,
- SELECT语句中的列的排列顺序和视图中的列的排列顺序相同。
例:
CREATE VIEW myView (age, name)
AS
SELECT age, name
FROM STU
WHERE age>10;
这就完成一个视图的创建,创建成功,会有CREATE VIEW
的字样。
之后就可以像用普通表一样去使用这个视图了。
使用视图的查询
实际有两个步骤:
- 执行定义视图的SELECT语句。
- 根据得到的结果,再执行在FROM子句中使用视图的SELECT语句。
多重的视图会降低效率,所以建议使用单重视图。
视图的限制:
- 定义视图时不能使用
ORDER BY
子句。
因为视图和表一样,数据都是没有顺序的。 - 限制性对视图进行更新
条件:- SELECT子句中未使用DISTINCT
- FROM子句中只有一张表
- 未使用
GROUP BY
子句。 - 未使用
HAVING
子句
视图和表需要同时进行更新,因此通过聚合得到的视图无法进行更新
在视图中进行数据的更新, 在原表中,数据也会进行更新。
删除视图
语法:
DROP VIEW 视图名称
例如:
DROP VIEW myView
在PostgreSQL下,如果想删除已视图未寄出创建出来的多重视图,会由于存在关联视图,而发生错误。
可以使用DROP VIEW 视图名 CASCADE
进行删除。
5-2 子查询
子查询和视图
子查询就是一张一次性的视图。
例:
SELECT name ,age
FROM (SELECT name, age
FROM STU
WHERE age>10) AS temp;
有种类似嵌套SELECT的感觉。
子查询作为内层查询会首先执行。
增加子查询的层数
子查询的层数原则上没有上限。
标量子查询
标量子查询有一个特殊限制:
必须而且只能返回一行一列的数据
标量子查询就是返回单一值的子查询
使用实例:
当在WHERE
时,需要使用类似平均值这种聚合函数,但是会发生错误。如果我们需要使用到标量子查询。
例如:
SELECT *
FROM STU
WHERE score > (SELECT AVG (score)
FROM STU);
使用范围:
任意可以使用单一值的
5-3 关联子查询
- 关联子查询会在细分的组内进行比较时使用
- 关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分。
- 关联子查询的结合条件如果未给出在子查询之中就会发生错误。
使用情况:
对切分后的组进行子查询
SQL入门学习4-复杂查询的更多相关文章
- SQL入门学习2-聚合与排序
3-1 对表进行聚合查询 聚合函数 所谓聚合,就是将多行汇总为一行. 函数名 功能 COUNT 计算表中的记录数(行数) SUM 计算表中数值列的数据合计值 AVG 计算表中数值列的数据平均值 MAX ...
- SQL入门学习1-查询基础
2-1 SELECT语句基础 SELECT语句作用 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). 重点 使用SELECT语句从表中选取数据. 为列设定显示用的别名 ...
- SQL入门学习0-数据库与SQL
1.1 DBMS DatabaseManagermentSystem 数据库管理系统 DBMS种类 层次型数据库(HDB) 最古老的数据库之一,把数据通过层次结构的方式表现. 关系型数据库(RDB) ...
- SQL Serever学习9——基础查询语句
SQL语言概述 SQL是结构化查询语言(Structure Query Language),1974年提出,1979年被IBM实现,SQL语言已经成为关系型数据库的标准语言. 包括: DDL数据定义语 ...
- SQList3 and SQL入门学习笔记
SQL 这是一个标准的计算机语言进行访问和操作数据库. 什么是 SQL? · SQL 指结构化查询语言 · SQL 使我们有能力訪问数据库 · SQL 是一种 AN ...
- SQL入门学习5-函数、为此、CASE表达式
6-1. 各种各样的函数 函数的种类 算数函数 字符串函数 日期函数 转换函数 聚合函数 1.1算术函数 数据类型:NUMERIC 是大多数DBMS都支持的一种数据类型. 通过NUMBERIC(全体位 ...
- SQL入门学习3-数据更新
4-1 数据的插入(INSERT语句的使用方法) 使用INSERT语句可以向表中插入数据(行).原则上,INSERT语句背刺执行一行数据插入. CREATE TABLE 和INSERT 语句,都可以设 ...
- Sql入门学习——关系范式
--------关系 --------范式 一.三种关系 1.一对一关系 关系数据库中,第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关. 2.一 ...
- Sql入门学习——基本语法函数
--------使用工具navicat 快捷键操作 --------基本操作DML &DDL --------运算比较 --------数据类型 --------常用函数 --------常用 ...
随机推荐
- codeforces293E (树上点分治+树状数组)
和poj1747相比起来,只不过是限制条件多了一维. 而多了这一维,所以需要用树状数组来维护,从而快速得到答案. 因为没注意传进树状数组函数的参数可能是<=0的,导致超时了好久. #pragma ...
- 【翻译】Why JavaScript Is and Will Continue to Be the First Choice of Programmers
花费2半小时,那么最终会被翻译.假设有问题,请提出,毕竟,自己的6不超过级别. 附加链接 Why JavaScript Is and Will Continue to Be the First Cho ...
- C++传递函数指针
函数指针是一个很好的类型.因此,您可以编写一个函数,它的一个参数是一个函数指针.然后.在(外部)当函数使用的函数指针参数,来间接调用时调用相应的参数的函数的函数. 因为指针在不同的情况下能够指向不同的 ...
- 简介支持向量机热门(认识SVM三位置)
支持向量机通俗导论(理解SVM的三层境地) 作者:July .致谢:pluskid.白石.JerryLead.出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector ...
- Android 大约Dialog弹出窗口
直接效果图: 实现步骤: 1.主界面activity_main.xml非常easy,一个button <RelativeLayout xmlns:android="http://sch ...
- web:转盘抽奖
移动web:转盘抽奖(幸运大转盘) 为了获取客户.回馈客户,平台一般会推出抽奖活动类的营销页.因此web页面中,有各式各样的抽奖效果. 格子式(九宫格),背景滚动式(数字/文字/图案),旋转式(转 ...
- Autodesk FBX SDK Program 中文 (二)
这是Autodesk FBX SDK学习笔记第二篇.下面部分汉字翻译自Autodesk FBX SDK Program.翻译人:有道翻译. 上一篇讲了一些FBX SDK的基本操作.创建FbxManag ...
- 认识Require
1. 加载require.js文件 <script type="text/javascript" src="js/require.js" data-mai ...
- Best Time to Buy and Sell Stock I,II,III [leetcode]
Best Time to Buy and Sell Stock I 你只能一个操作:维修preMin拍摄前最少发生值 代码例如以下: int maxProfit(vector<int> & ...
- Twitter实时搜索系统EarlyBird
twitter要存档tweet采用lucene做全量指数,新发型是实时索引推文.检索实时(10在几秒钟内指数).实时索引和检索系统,称为EarlyBird. 感觉写更清晰,简洁,这个信息是真实的,只有 ...