1 语法
在MySQL中,with as语句通常用于创建临时性的命名查询结果集,也称为公共表表达式(Common Table Expression,CTE)。
通过WITH AS语句,可以在一个查询中定义一个临时的虚拟表,然后在其他部分引用这个表,从而提高查询的可读性和可维护性。
使用WITH AS语句的一般语法结构如下:
WITH 命名表名 AS (
查询语句
)
SELECT 字段列表
FROM 命名表名
WHERE 条件;
使用WITH AS语句可以使复杂的查询更易于管理和维护,避免重复编写相同的子查询。
此外,WITH AS语句还可以提高查询的性能,因为数据库系统可能会对WITH AS子查询进行优化处理,降低整体查询的成本。
2 例子
牛客上的题目:SQL284 获得积分最多的人(二)
#先创建一个临时表
#查询每个人积分的总和
with t as (
SELECT user_id,sum(grade_num) as grade_sum
from grade_info
group by user_id
)
select u.id,u.name,t.grade_sum as grade_num
from t
left join user u on t.user_id = u.id
where t.grade_sum = (
select max(t.grade_sum)
from t
);
3 视图
此外,我觉得with as和视图有点像,不过WITH AS创建的临时表仅在当前查询内可见且一次性使用,而视图是存储在数据库中的查询结果,可以被多次查询和引用。
比如:查询姓张的同学的姓名和专业名
create view v1
as
select stuname,majorname
from stuinfo s
inner join major m
on s.majorid = m.id;
select *
from v1
where stuname like '张%';
具体视图的操作可以看看我之前总结的博客:【Mysql数据库基础08】事务、视图的创建和修改