mysql中with...as用法

前言

with  as 也叫子查询,用来定义一个sql片段,且该片段会被整个sql语句反复使用很多次,这个sql片段就相当于是一个公用临时表

如:with tmp  as (select * from B)

       select * from  tmp

先执行select * from B拿到一个结果,将这个结果记录为tmp,再执行 select * from  tmp

一、适用场景

因with as 子查询仅执行一次,将结果存储在用户临时表中,提高查询性能,所以适合多次引用的场景,如:复杂的报表统计,分页查询,且需要拿到sum、count、avg这类结果作为筛选条件,对查询出的结果进行二次处理!

特别对于union all比较有用。因为union all的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高

注意:

需要mysql 8.0以上版本

是hive的早中期用法,很多技术高手经常在用

二、常用语法

–针对一个别名

with tmp as (select * from tb_name)

–针对多个别名
with
tmp as (select * from tb_name),
tmp2 as (select * from tb_name2),
tmp3 as (select * from tb_name3),

–相当于建了个e临时表
with e as (select * from scott.emp e where e.empno=7499)
select * from e;

–相当于建了e、d临时表
with
e as (select * from scott.emp),
d as (select * from scott.dept)
select * from e, d where e.deptno = d.deptno;

其实就是把一大堆重复用到的sql语句放在with as里面,取一个别名,后面的查询就可以用它,这样对于大批量的sql语句起到一个优化的作用,而且清楚明了。

三,使用with as应该注意

1 with as后面必须紧跟使用CTE(Common table Express--公用表) (with as)的语句

with  a as

(

select * from tb1

)

select * from tb2,a where a.id=tb1.id(就是这个)

2 多个CTE 之间加,分割

with t1 as

(

select * from t1

),(第一个CTE)

t2 as

(

select * from t2

),(第二个CTE)

t3 as

(

select * from t3

)(第三个CTE)

  • 9
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值