一、WITH AS 的含义

使用with as 可以让子查询重用相同的with查询块,并在select查询块
中直接引用,一般用在select查询块会多次使用某个查询sql时,会把这个sql语句放在with as 中,作为公用的表达式,通过别名的方式在主查询语句中重复使用。

二、WITH AS 的含使用

现有两张表cust_info_detail(客户信息表,表中三个字段,id、name、sex)、order_info_detail(订单详情表,表中3个字段,order_id、order_time、cid,其中cid关联客户信息表中的id)
,现在要统计某天(作为查询入参)中每个用户下单的数量以及客户的相关信息,如果用户当天没有下单,显示下单数为0。

使用语法:
WITH 
(SELECT语句) AS 别名1(SELECT语句) AS 别名2...
 SELECT  * FROM 别名1,别名2 WHERE 别名1.id = 别名2.id; 

说明:下面这个SELECT * FROM 别名1,别名2 WHERE 别名1.id = 别名2.id;是主查询语句,可以调用上面定义好的select公用表达式
,需要注意的是主语句不仅仅局限于查询语句,也可以是更新或者删除和插入语句。

WITH
(SELECT id,name FROM cust_info_detail GROUP BY id) AS cust_info,
(SELECT cid, COUNT(order_id) as num FROM order_info_detail WHERE order_time = $datadt$ GROUP BY cid) AS order_num
SELECT
	  t.name   AS '客户姓名'
	 ,t.sex	   AS '客户性别'
	 ,IF(t1.num IS NULL, 0, t1.num)   AS '客户下单数'
	FROM cust_info t
	LEFT JOIN order_num t1 ON t.id = t1.cid

三、WITH AS 的作用

1.定义一个sql片断,该sql片断会被整个sql语句所用到,简化sql,提高可读性
2.with子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐