5-1 视图

视图和表

视图和表的区别只有一个是否保存了实际的数据

使用INSERT和SELECT实际上就是从存储设备中读取数据,各种计算后,将数据呈现给用户。

视图不会将数据保存在存储设备中。实际上,视图保存的是SELECT语句视图会在内部执行该SELECT并创建出一张临时表。

视图的优点

  1. 无需保存数据,节省存储设备的容量。
  2. 可以将频繁使用的SELECT保存成视图,这样就不用每次都重新书写了。

创建视图

创建视图,要使用CREATE VIEW语句

语法:

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

注意:

  1. SELECT语句需要书写在AS关键字之后,
  2. SELECT语句中的列的排列顺序和视图中的列的排列顺序相同。

例:

CREATE VIEW myView (age, name)
AS
SELECT age, name
FROM STU
WHERE age>10;

这就完成一个视图的创建,创建成功,会有CREATE VIEW的字样。

之后就可以像用普通表一样去使用这个视图了。

使用视图的查询

实际有两个步骤:

  1. 执行定义视图的SELECT语句。
  2. 根据得到的结果,再执行在FROM子句中使用视图的SELECT语句。

多重的视图会降低效率,所以建议使用单重视图。

视图的限制:

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

    因为视图和表一样,数据都是没有顺序的。
  2. 限制性对视图进行更新

    条件:

    • 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-复杂查询的更多相关文章

  1. SQL入门学习2-聚合与排序

    3-1 对表进行聚合查询 聚合函数 所谓聚合,就是将多行汇总为一行. 函数名 功能 COUNT 计算表中的记录数(行数) SUM 计算表中数值列的数据合计值 AVG 计算表中数值列的数据平均值 MAX ...

  2. SQL入门学习1-查询基础

    2-1 SELECT语句基础 SELECT语句作用 SELECT 语句用于从表中选取数据. 结果被存储在一个结果表中(称为结果集). 重点 使用SELECT语句从表中选取数据. 为列设定显示用的别名 ...

  3. SQL入门学习0-数据库与SQL

    1.1 DBMS DatabaseManagermentSystem 数据库管理系统 DBMS种类 层次型数据库(HDB) 最古老的数据库之一,把数据通过层次结构的方式表现. 关系型数据库(RDB) ...

  4. SQL Serever学习9——基础查询语句

    SQL语言概述 SQL是结构化查询语言(Structure Query Language),1974年提出,1979年被IBM实现,SQL语言已经成为关系型数据库的标准语言. 包括: DDL数据定义语 ...

  5. SQList3 and SQL入门学习笔记

    SQL 这是一个标准的计算机语言进行访问和操作数据库. 什么是 SQL? ·       SQL 指结构化查询语言 ·       SQL 使我们有能力訪问数据库 ·       SQL 是一种 AN ...

  6. SQL入门学习5-函数、为此、CASE表达式

    6-1. 各种各样的函数 函数的种类 算数函数 字符串函数 日期函数 转换函数 聚合函数 1.1算术函数 数据类型:NUMERIC 是大多数DBMS都支持的一种数据类型. 通过NUMBERIC(全体位 ...

  7. SQL入门学习3-数据更新

    4-1 数据的插入(INSERT语句的使用方法) 使用INSERT语句可以向表中插入数据(行).原则上,INSERT语句背刺执行一行数据插入. CREATE TABLE 和INSERT 语句,都可以设 ...

  8. Sql入门学习——关系范式

    --------关系 --------范式 一.三种关系 1.一对一关系 关系数据库中,第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关. 2.一 ...

  9. Sql入门学习——基本语法函数

    --------使用工具navicat 快捷键操作 --------基本操作DML &DDL --------运算比较 --------数据类型 --------常用函数 --------常用 ...

随机推荐

  1. Windows Phone开发(42):缓动动画

    原文:Windows Phone开发(42):缓动动画 前面在讨论关键帧动画的时候,我有意把几个带缓动动画的关键帧动画忽略掉,如EasingColorKeyFrame.EasingDoubleKeyF ...

  2. Linux 该文件命令查看内容

    Linux系统,请使用以下命令来查看文件的内容: cat tac  从最后一行開始显示.能够看出 tac 是 cat 的倒著写! nl   显示的时候,顺道输出行号! more 一页一页的显示文件内容 ...

  3. nyoj 228 士兵杀死(五岁以下儿童)【树状数组】

    分析:这个问题问的是,因为它是一个单独的更新.因此,让我们更新,然后在c[i]表现为1~i之间,还原之后看起来像一个. #include <cstdio> #include <cst ...

  4. 将本地文件上传到指定的服务器(HttpWebRequest方法)

    将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值. ///<summary> /// 将本地文件上传到指定的服务器(H ...

  5. OpenVPN-ng,为移动续航的应用层隧道

    VPN,让人觉得它总是做好事的,是逃离监管的途径,其实VPN已经成了逃离监管的唯一代名词.你看,无论是什么技术,IPSec也好,WEB代理也罢,仅仅要是加密了原始信息的技术,都能够叫做VPN,于是乎就 ...

  6. Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志

    Tethering技术在移动平台上已经运用的越来越广泛了.它能够把移动设备当做一个接入点,其它的设备能够通过Wi-Fi.USB或是Bluetooth等方式连接到此移动设备.在Android中能够将Wi ...

  7. 检验身份证的正确性(C语言版本)

    /* check id_card * write by sndnvaps<sndnvaps@gmail.com> * ai -> a1 , a2, a3, a4, a5, a6... ...

  8. 重新想象 Windows 8 Store Apps (25) - 选取器: 文件选取窗口, 文件夹选取窗口, 文件保存窗口

    原文:重新想象 Windows 8 Store Apps (25) - 选取器: 文件选取窗口, 文件夹选取窗口, 文件保存窗口 [源码下载] 重新想象 Windows 8 Store Apps (2 ...

  9. 在WPF中处理Windows消息

    在Winform中 处理Windows消息通过重写WndProc方法 在WPF中 使用的是System.Windows. Sytem.Windows.Controls等名字空间,没有WndProc函数 ...

  10. Ognl底层使用

    今天,在得知ognl采用.在这里和大家分享一下.我希望能帮助. package com.hcj.test; import java.util.ArrayList; import java.util.L ...