Day3-SQL视图、函数(Datawhale)

本文详细介绍了SQL中的视图概念,包括视图与表的区别、创建与修改视图的方法,以及视图的更新与删除。同时,深入探讨了子查询的类型,如嵌套子查询、标量子查询和关联子查询,并通过实例说明其用法。此外,还讲解了SQL中的算术、字符串、日期和转换函数的应用。
摘要由CSDN通过智能技术生成

目录

一、视图

1. 什么是视图

2. 视图和表的区别

3. 为什么存在视图

4.  如何创建视图

4.1 基于单表的视图

4.2 基于多表的视图

5. 修改视图结构

6. 更新视图内容

7. 删除视图

二、子查询

1. 什么是子查询

2. 子查询与视图的关系

3. 嵌套子查询

4. 标量子查询

5. 关联子查询

练习1

三、函数

1. 算术函数

2. 字符串函数

3. 日期函数

4. 转换函数

四、谓语

五、CASE表达式

1. 不同分支得到不同列值

2. 实现列方向上的聚合

3. 实现行转列

练习2

总结


一、视图

从SQL角度操作视图和操作表看起完全相同

1. 什么是视图

视图是虚拟的表,视图是依据SELECT语句来创建的,操作视图时会根据创建视图的SELECT语句生成一张虚拟表,然后在虚拟表上做SQL操作

2. 视图和表的区别

视图不保存实际的数据,作为一个窗口,通过窗口看到数据表中实际的数据,视图是基于真实表的一张虚拟表,其数据来源均建立在真实表的基础上。

3. 为什么存在视图

  • 将频繁使用的SELECT语句保存以提高效率
  • 使用户看到的数据更清晰
  • 不对外公开数据表全部字段,增强数据保密性
  • 降低数据的冗余

4.  如何创建视图

CREATE VIEW <视图名称>(<列名1>,<列名2>,……) AS <SELECT 语句>;
  • SELECT语句中列的排列顺序和视图的排列顺序相同,主要是顺序的一致性,名称可以不一致。
  • 视图名在数据库中需要唯一,不能与其他视图和表重名
  • 视图可以基于表和视图创建(避免多重视图,会降低SQL性能)
  • 视图不能使用ORDER BY

4.1 基于单表的视图

CREATE VIEW productsum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*)
FROM product
GROUP BY product_type;

4.2 基于多表的视图

CREATE VIEW view_shop_product(product_type, sale_price, shop_name)
AS 
SELECT product_type, sale_price, shop_name
FROM product,
	 shop_product
WHERE product.product_id = shop_product.product_id;

在视图的基础上查询

语句与在表上的操作一致

SELECT * 
FROM view_shop_product
WHERE product_type = '衣服';

5. 修改视图结构

ALTER VIEW <视图名> AS <SELECT语句>;

修改视图的结构,可以新增查询条件,也可以新增字段,新增字段时一定要保证视图字段和查询字段一致。

ALTER VIEW view_shop_product(product_type, sale_price, shop_name)
AS 
SELECT product_type, sale_price, shop_name
FROM product,
	 shop_product
WHERE product.product_id = shop_product.product_id
AND regist_date>'2009-09-11';

6. 更新视图内容

对视图的操作基于底层表的操作,修改时只有满足底层基本表的定义才能修改成功。包含以下任意一种,都不能被更新:

  • 聚合函数 SUM()、MIN()、MAX()、COUNT() 等
  • DISTINCT 关键字。
  • GROUP BY 子句。
  • HAVING 子句。
  • UNION 或 UNION ALL 运算符。 
  • FROM 子句中包含多个表。
UPDATE productsum
    SET sale_price = '5000'
WHERE prodcut_type = '办公用品';

通过视图的修改只能透过窗口能看到内容

注意:不推荐透过视图去改表内容

7. 删除视图

DROP VIEW <视图名1>[ , <视图名2>];

需要有相应的权限

DROP VIEW productsum;

 

二、子查询

1. 什么是子查询

一个查询语句嵌套另一个查询语句内部的查询。先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或多个表。

 

2. 子查询与视图的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值