SQL 中with的用法

作者&投稿:亢果 (若有异议请与网页底部的电邮联系)
SQL中使用WITH 语句的查询~

sql with as 用法(适用sqlserver,好像oracle也适用)

Server 2005中提供了公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效率高得多。

下面是CTE的语法:
[ WITH [ ,n ] ]
::=
expression_name [ ( column_name [ ,n ] ) ]
AS
( CTE_query_definition )

现在使用CTE来解决上面的问题,SQL语句如下:

with
cr as
(
select CountryRegionCode from person.CountryRegion where Name like 'C%'
)

select * from person.StateProvince where CountryRegionCode in (select * from cr)

其中cr是一个公用表表达式,该表达式在使用上与表变量类似,只是SQL Server 2005在处理公用表表达式的方式上有所不同。
在使用CTE时应注意如下几点:
1. CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。如下面的SQL语句将无法正常使用CTE:

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)

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

3. 如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据表或视图了,如下面的SQL语句所示:
-- table1是一个实际存在的表
with
table1 as
(
select * from persons where age < 30
)
select * from table1 -- 使用了名为table1的公共表表达式
select * from table1 -- 使用了名为table1的数据表

4. CTE 可以引用自身,也可以引用在同一 WITH 子句中预先定义的 CTE。不允许前向引用。

5. 不能在 CTE_query_definition 中使用以下子句:
(1)COMPUTE 或 COMPUTE BY
(2)ORDER BY(除非指定了 TOP 子句)
(3)INTO
(4)带有查询提示的 OPTION 子句
(5)FOR XML
(6)FOR BROWSE

6. 如果将 CTE 用在属于批处理的一部分的语句中,那么在它之前的语句必须以分号结尾,如下面的SQL所示:
declare @s nvarchar(3)
set @s = 'C%'
; -- 必须加分号
with
t_tree as
(
select CountryRegionCode from person.CountryRegion where Name like @s
)
select * from person.StateProvince where CountryRegionCode in (select * from t_tree)

7、CTE除了可以简化嵌套SQL语句外,还可以进行递归调用

你可以查询CTE,即common_table_expression,创建个临时表。
用途:1,以前的子查询可以用它代替了,看上去很明了;2,也即他的优点,可以递归调用:select uinon all select cte
用法你可以F1。
注意:1,一般我们写 ;with cte as , 因为若他不是批处理的开始则加;分号。
2,一个with中 不同的表用,逗号分开,如
;with cet1 as ()
,cte2 as()
cte3 as()

SQL 中with的用法如下:

CTE 之后必须跟随引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 语句。也可以在 CREATE VIEW 语句中将 CTE 指定为视图中 SELECT 定义语句的一部分。

可以在非递归 CTE 中定义多个 CTE 查询定义。定义必须与以下集合运算符之一结合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。

CTE 可以引用自身,也可以引用在同一 WITH 子句中预先定义的 CTE。不允许前向引用。

不允许在一个 CTE 中指定多个 WITH 子句。例如,如果 CTE_query_definition 包含一个子查询,则该子查询不能包括定义另一个 CTE 的嵌套的 WITH 子句。

不能在 CTE_query_definition 中使用以下子句:

COMPUTE 或 COMPUTE BY

ORDER BY(除非指定了 TOP 子句)

INTO

带有查询提示的 OPTION 子句

FOR XML

FOR BROWSE

扩展资料

定义和使用递归 CTE 指南

下列指南适用于定义递归 CTE 的情况:

递归 CTE 定义至少必须包含两个 CTE 查询定义,一个定位点成员和一个递归成员。可以定义多个定位点成员和递归成员;但必须将所有定位点成员查询定义置于第一个递归成员定义之前。所有 CTE 查询定义都是定位点成员,但它们引用 CTE 本身时除外。

定位点成员必须与以下集合运算符之一结合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。在最后一个定位点成员和第一个递归成员之间,以及组合多个递归成员时,只能使用 UNION ALL 集合运算符。

定位点成员和递归成员中的列数必须一致。

递归成员中列的数据类型必须与定位点成员中相应列的数据类型一致。

递归成员的 FROM 子句只能引用一次 CTE expression_name。

在递归成员的 CTE_query_definition 中不允许出现下列项:



1、with表示状态时,还可作“跟上…”“听懂…的话”解,一般用于疑问句或否定句中。

2、with表示关系时还可作“与…合并〔混合,组合〕”解。

3、with表示伴随状态时,作“以与…同样的方向〔程度,比率〕”解。可接“名词+动词不定式”“名词+现在分词”“名词+过去分词”。

4、with表示比较时作“同…相比”“与…平行”解。

5、with可以用来表示虚拟语气,意思是“如果,假如”。用于诗歌或民谣的副歌、叠句中,with常无实际含意。

6、在with的前面加away,down等词时,可作为不用动词的命令格式。

扩展资料

近义词:and

读音:英 [ənd , ænd]   美 [ənd , ænd] 

释义:和,与,同,又。

语法:and用作连词,主要用来连接两个或两个以上的词、短语或句子。and连接两个相同的词语可用以加强语气或表示动作的反复或一再发生。常用and连接十位数和百位数。两个名词被and连接,如前一名词带冠词,后一名词不带冠词,则整个结构表示一个整体。

例句:

All through yesterday crowds have been arriving and by midnight thousands of people packed the square. 

昨天陆续有大批人到来,午夜时有几千人聚集在广场上。



1、with常指在观点或主张上与某人采取一致的态度,意思是“与…一致”“与…站在一边”,但有时也可指“与…对抗”“站在…的对立面”。

2、with表示使用某工具。

3、如同时表示工具和材料时,应用with。

4、with表示交际的动作一般是双向的,在美式英语中有时也可表示单向动作。

5、with后的宾语后所接的形容词,过去分词或名词都可作表语。

扩展资料

反义词:without

读音:英 [wɪˈðaʊt]   美 [wɪˈðaʊt] 

释义:没有,缺乏,不和…在一起。

语法:without作“无,没有”解时其后可接动名词(短语),表示“没有做某事”,动名词短语中动名词常可省略。在口语中,without后的宾语如可在上下文中找到或笼统地指一种状况而不是指任何具体事物,则该宾语可省略。

例句:

Janet Magnusson watched his approach without enthusiasm 

珍妮特·马格努森冷冷地看着他走过来。



WITH 通常与AS连用,也叫做子查询部分。用法:
1). 可用来定义一个SQL片断,该片断会被整个SQL语句所用到。
2). 为了让SQL语句的可读性更高
3). 也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有
用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本
太高,所以可以使用WITH AS短语,则只要执行一遍即可。
例如:下面两种表达的是同一种意思:
①with alias as (select * from pra)
②select * from pra;

with a as (select * from test)

select * from a;
其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它


兰坪白族普米族自治县13194324766: SQL 中with的用法 -
禤贩奥复: with a as (select * from test) select * from a; 其实就是把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它

兰坪白族普米族自治县13194324766: sqlserver with 语法 -
禤贩奥复: 一.sqlserver with as的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL...

兰坪白族普米族自治县13194324766: SQL SERVER里面的with语句有什么作用?用过的师兄请帮忙 -
禤贩奥复: 举个例子 with(conn){ .para1 = 1; .para2 = 2; ... .paraN = N; } with 其实就是减少代码,省略写法.不要写N个conn.

兰坪白族普米族自治县13194324766: sql 中 with ties 干嘛用的 -
禤贩奥复: 是with ties还真不知道.ties是不是sql语句的关键词.我记得有with ... as 这种语句,你看看是不是你想要的答案: withsql1 as (select * from 表1) select * from sql1; 上边这条语句等同于: select * from (select * from 表1); with .. as 这种语法适合于多表链接.

兰坪白族普米族自治县13194324766: 数据库中in、on、with的用法及示例. -
禤贩奥复: 1. in select * from tab where field in ('A', 'B', 'C') 等价于select * from tab where field = 'A' or field = 'B' or field = 'C' 2. on永在表连接的时候 select * from a inner/left/right join b on a.xx = b.xx 3. with用法: 创建一个表: create table regr (pid integer,id ...

兰坪白族普米族自治县13194324766: 请教hibernate的HQL的with查询,with怎么使用 -
禤贩奥复: inner join(内连接) left outer join(左外连接) right outer join(右外连接) full join (全连接,并不常用) HQL中的条件用with即:left join ... with...SQL中的条件用on即:left join ... on...语句inner join, left outer join 以及 right outer join 可以简写....

兰坪白族普米族自治县13194324766: sql中可不可以连续使用两个with -
禤贩奥复: 可以,语法如下 WITH CTE1() AS(),CTE2() AS()

兰坪白族普米族自治县13194324766: sql里面 with...as 是什么意思啊?如何使用 -
禤贩奥复: 是公用表表达式,可以理解为创建临时表.比如 WITH A AS(SELECT * FROM TABLE1) SELECT * FROM A

兰坪白族普米族自治县13194324766: sqlserver 2008 with 关键字怎么用 -
禤贩奥复: SQL Server 2005新特性之使用with关键字解决递归父子关系 http://www.cnblogs.com/holywolf/archive/2008/12/22/1359546.html

兰坪白族普米族自治县13194324766: sql中的WITH cet - emp是什么用作 如何使用 -
禤贩奥复: WITH cet_emp 这里的 WITH 是 SQL Server 的 CTE ( Common Table Expressions ) .就是假如你的主SQL 里面,有段比较长的子查询,需要使用多次的, 那么使用 CTE 可以提高一些效率, 以及你的代码的可读性.具体信息,可参考微软的说明文档:http://msdn.microsoft.com/zh-cn/library/ms190766.aspx

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网