亲宝软件园·资讯

展开

Mysql通用表达式WITH AS语句

橘子粥 人气:3

一、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子查询只执行一次,将结果存储在用户临时表空间中,可以引用多次,增强性能

补充:使用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)

总结

加载全部内容

相关教程
猜你喜欢
用户评论