SQL视图、子查询、函数-天池龙珠计划SQL训练营-笔记
1视图
1.1 什么是视图
虚拟的表,可理解为c语言中的指针,为了提高效率以及增强保密性(不显示视图以外的数据)。
1.2 创建视图
create view view_name (list_name) as <select 语句>
1.3 修改视图结构
alter view view_name as <select语句>
1.4更新视图内容
update <name> <set> <where>
更新视图原表数据也会被更改!!
1.5删除视图
drop view <name>
2子查询
2.1 什么是子查询
子查询指一个查询语句嵌套在另一个查询语句内部的查询。括号内部,优先执行
2.2 子查询和视图的关系
子查询是一次性的,不会像视图那样保存在存储介质中。
2.3 嵌套子查询
多层嵌套,但是随着子查询嵌套的层数的叠加,SQL语句不仅会难以理解而且执行效率也会很差,所以要尽量避免这样的使用。
2.4 标量子查询
标量会进行广播处理
2.5关联子查询
查询与子查询存在关联
小结
子查询实现较复杂的查询功能,但可读性差,尽量设计简洁的语句。
3函数
数据库中函数与其他语言没有什么不同,总计200多个,常用的30-50个
3.1常用函数
函数均是对每个分量单独处理。 用在select function(list_name) from table.
- abs(),mod(),round()四舍五入
- concat()拼接 length()长度 lower(),REPLACE( 对象字符串整体,部分需要替换的字符,替换后的字符串 )
- SUBSTRING (对象字符串 FROM 截取的起始位置 FOR 截取的字符数)索引从1开始
- SUBSTRING_INDEX (原始字符串, 分隔符,n) 第 n 个分隔符之前(或之后)的子字符串,支持正向和反向索引,索引起始值分别为 1 和 -1。
- CURRENT_DATE – 获取当前日期
- CURRENT_TIME – 当前时间
- CURRENT_TIMESTAMP – 当前日期和时间
- EXTRACT – 截取日期元素
- CAST – 类型转换 注意字符串的引号与数字,日期不同
- COALESCE – 将NULL转换为其他值。 该函数会返回可变参数 A 中左侧开始第 1个不是NULL的值
4谓词
谓词就是返回值为真值的函数。多用在where判断处。包括TRUE / FALSE / UNKNOWN。
4.1常用
- like 正则表达 例如WHERE strcol LIKE ‘ddd%’;其中的%是代表“零个或多个任意字符串”的特殊符号。使用 _(下划线)来代替 %,与 % 不同的是,它代表了“任意 1 个字符”。
- between 例如 WHERE sale_price BETWEEN 100 AND 1000;
- 为了选取出某些值为 NULL 的列的数据,不能使用 =,而只能使用特定的谓词IS NULL。
- in 代替or 例如 purchase_price IN (320, 500, 5000);
4.2 exist
“判断是否存在满足某种条件的记录”。
例子
SELECT product_name, sale_price
FROM product AS p
WHERE EXISTS (SELECT *
FROM shopproduct AS sp
WHERE sp.shop_id = '000C'
AND sp.product_id = p.product_id);
上面这样的子查询就是唯一的参数。确切地说,由于通过条件“SP.product_id = P.product_id”将 product 表和 shopproduct表进行了联接,因此作为参数的是关联子查询。 EXIST 通常会使用关联子查询作为参数。
5case表达式
CASE 表达式是在区分情况时使用的,这种情况的区分在编程中通常称为(条件)分支。
CASE WHEN <求值表达式> THEN <表达式>
WHEN <求值表达式> THEN <表达式>
WHEN <求值表达式> THEN <表达式>
.
.
.
ELSE <表达式>
END
- 根据不同分支得到不同列值
- 实现列方向上的聚合
- 实现行转列