sql语句中with
① 问一下关于sql语句的问题,with什么意思,别的都是什么意思,谢谢!!
with as 得到的数据是一次性使用的临时数据。其中with 不是单独一个意思,跟as组合起来后成为一个短语。
举个例子:
with [abc] as(……)
select …… from [abc] where 条件A
select …… from [abc] where 条件B
以上语句在执行时,条件A的语句能取到数;取完数后 临时数据[abc]就清除了;所以到条件B的语句就执行不下去了。
② SQL 中with的用法
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
(2)sql语句中with扩展阅读
定义和使用递归 CTE 指南
下列指南适用于定义递归 CTE 的情况:
递归 CTE 定义至少必须包含两个 CTE 查询定义,一个定位点成员和一个递归成员。可以定义多个定位点成员和递归成员;但必须将所有定位点成员查询定义置于第一个递归成员定义之前。所有 CTE 查询定义都是定位点成员,但它们引用 CTE 本身时除外。
定位点成员必须与以下集合运算符之一结合使用:UNION ALL、UNION、INTERSECT 或 EXCEPT。在最后一个定位点成员和第一个递归成员之间,以及组合多个递归成员时,只能使用 UNION ALL 集合运算符。
定位点成员和递归成员中的列数必须一致。
递归成员中列的数据类型必须与定位点成员中相应列的数据类型一致。
递归成员的 FROM 子句只能引用一次 CTE expression_name。
在递归成员的 CTE_query_definition 中不允许出现下列项:
③ SQL中使用WITH 语句的查询
sql
with
as
用法(适用sqlserver,好像oracle也适用)
Server
2005中提供了公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效率高得多。
下面是CTE的语法:
[
WITH
<common_table_expression>
[
,n
]
]
<
common_table_expression>::=
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语句外,还可以进行递归调用
④ SQL SERVER里面的with语句有什么作用用过的师兄请帮忙
with 是公用表表达式(CTE),它是一个在查询中定义的临时命名结果集将在from子句中使用它。每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存。可以使用CTE来执行递归操作。
with 自己起的名字 as
(
select * from 表名
)
select * from 自己起的名字
⑤ sql中,with的用法
1、with表示状态时,还可作“跟上…”“听懂…的话”解,一般用于疑问句或否定句中。
2、with表示关系时还可作“与…合并〔混合,组合〕”解。
3、with表示伴随状态时,作“以与…同样的方向〔程度,比率〕”解。可接“名词+动词不定式”“名词+现在分词”“名词+过去分词”。
4、with表示比较时作“同…相比”“与…平行”解。
5、with可以用来表示虚拟语气,意思是“如果,假如”。用于诗歌或民谣的副歌、叠句中,with常无实际含意。
6、在with的前面加away,down等词时,可作为不用动词的命令格式。
(5)sql语句中with扩展阅读
近义词:and
读音:英 [ənd , ænd] 美 [ənd , ænd]
释义:和,与,同,又。
语法:and用作连词,主要用来连接两个或两个以上的词、短语或句子。and连接两个相同的词语可用以加强语气或表示动作的反复或一再发生。常用and连接十位数和百位数。两个名词被and连接,如前一名词带冠词,后一名词不带冠词,则整个结构表示一个整体。
例句:
epackedthesquare.
昨天陆续有大批人到来,午夜时有几千人聚集在广场上。
⑥ sql中 WITH (TABLOCKX) 什么意思
这叫表的排它锁。
排它锁介绍:
排它锁又称为写锁((eXclusive lock,简记为X锁)),若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。在更新操作(INSERT、UPDATE 或 DELETE)过程中始终应用排它锁。
⑦ 下面SQL 中的;with 是什么意思,为什么一定要加上':with'呢,起什么作用呢。
SQL 语句里面的 with
是使用在 CTE 上面的
CTE(Common Table Expression) ,即公用表表达式,可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE ⅥEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。
⑧ SQL语句中,with用于构造关系时用as赋值,如果新构造的关系有个属性未在
as 一般用在两个地方,一个是query的时候,用来重新指定返回的column 名字
如:一个table 有个column叫 id, 我们的query是
select id from table1. 但是如果你不想叫id了,就可以重新命名,如叫 systemID 就可以这样写
select id as systemId from table1;
还有一个用法就是在create table 或 procere 的时候,as 是个关键字。
例如
create table test as select * from table1
这时候就会create 一个table test,他是完全 table table1里的全部数据。
create procre name as (is)
begin
end;
具体可以参考 如何建立procere。 这个时候 as 和is可以互换。
⑨ sql 语句中with ur是什么意思
UR:UR-Uncommitted Read 指的是“未提交读”。是sql执行时的一种隔离级别,允许脏读,不加行锁。
在DB2中,共有四种隔离级别:分别是RS,RR,CS,UR。
作用是在select的时候,不需要对update的数据进行等待。
(9)sql语句中with扩展阅读:
1、ur(Uncommited Read) “脏读“,在没有提交数据的时候能够读到更新的数据。
2、cs(Cursor Stability) 在一个事务中进行查询时,允许读取提交前的数据,数据提交后,当前查询就可以读取到数据,update数据的时候并不锁表。
3、rs(Read Stability) 在一个事务中进行查询时,不允许读取其他事务update的数据,允许读取到其他事务提交的新增数据。
4、rr(Repeatable Read) 在一个事务中进行查询时,不允许任何对这个查询表的数据修改。