Mysql中通用表达式WITH AS语句的使用实例代码
一、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公用表达式
,需要注意的是主语句不仅仅局限于查询语句,也可以是更新或者删除和插入语句。
1 2 3 4 5 6 7 8 9 | 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)的语句
?1 2 3 4 5 | with a as ( select * from tb1 ) select * from tb2,a where a.id=tb1.id(就是这个) |
2 多个CTE 之间加,分割
?1 2 3 4 5 6 7 8 9 10 11 12 | with t1 as ( select * from t1 ),(第一个CTE) t2 as ( select * from t2 ),(第二个CTE) t3 as ( select * from t3 )(第三个CTE) |
总结
到此这篇关于Mysql中通用表达式WITH AS语句使用的文章就介绍到这了,更多相关Mysql通用表达式WITH AS语句内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/dfff74/article/details/123036726
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。