with as (子查询)

为了自己更好地理解,还是老实练习一下:

with as (子查询)

sql脚本,方便以后随时练习:

with as (子查询) View Code

现在的需求是:找出要求部门包含“苏州”的项目表中的数据,一般来说,这样的需求一个简单的子查询就可以了,如下:
with as (子查询)

下面隆重祭出CTE:公用表表达式。

with as (子查询)


在使用CTE时应注意如下几点:

1. CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。如下面的SQL语句将无法正
常使用CTE:

with as (子查询)
with 
cr
as
(
select CountryRegionCode from person.CountryRegion where Name like 'C%'
)
select * from person.CountryRegion -- 应将这条SQL语句去掉
--
使用CTE的SQL语句应紧跟在相关的CTE后面--
select * from person.StateProvince where CountryRegionCode in (select * from cr)
with as (子查询)


2. CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔,如下面的SQL语句所示:

with as (子查询)
with 
cte1
as
(
select * from table1 where name like 'abc%'
),
cte2
as
(
select * from table2 where id > 20
),
cte3
as
(
select * from table3 where price < 100
)
select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id
with as (子查询)