【用途及定义】
当查询结构复杂,多次重用一个子查询sql导致重复冗余时使用,将子查询语句独立出来,可以看作一种赋值用法
ORACLE,SQL SERVER,HIVE等均可使用,MYSQL8.0后做了优化,也可使用
【特点】
存储到用户临时表空间,一次分析,多次使用
增强可读性,解耦,优化查询效率的方式之一
【实现】
WITH AAA AS
(
SELECT
COALESCE(A.student_name,'空') sname,
COALESCE(B.teacher_name,'空') tname,
FROM
Student A
JOIN
Teacher B
ON
A.CLASS_ID=B.CLASS_ID
),
CCC AS
(
SELECT
count(*)
FROM
Student A
WHERE
A.sex = '男'
AND
A.class_name = '一年级一班'
)
SELECT
AAA.sname,
AAA.tname,
CCC.cname
FROM
AAA,CCC
【注】
- with as 与之后的select作为一条sql使用
- 一条sql只能有一个with,多个as之间用","隔开,in的最后是")"
- with不可单独使用,不可嵌套
文章参考大神链接如下