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  
  • 根据不同分支得到不同列值
  • 实现列方向上的聚合
  • 实现行转列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值