当前位置:首页 » 编程语言 » sql语句with的用法

sql语句with的用法

发布时间: 2023-05-22 12:28:53

‘壹’ WITH AS 用法 sql

每天一个BUG小技巧

WITH AS短语,也逗祥叫做子查询部分(subquery factoring),是用来定义一个SQL片断,该SQL片断会被整个SQL语句所用到。这个语句算是公用表表达式(CTE)。

例:
with A as (select * from class)

先执行select * from class 得到一个结果,将这个结果记录为A ,在执行select *from A 语句。A 表只是一个别名。

将重复银仿用到的大批量 的SQL语句,放到with as 中,加一个别名,在后面用到的时候就可以直接用。对于大批量的SQL数据,起到优化的作用。

但是子查询 a 在我们的SQL语句中出现了多锋指纤次。这种写法不仅存在额外的开销,还使得整个语句显的繁杂。使用 WITH 语句再次重写:

图片出处 https://zhuanlan.hu.com/p/272168179

‘贰’ 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 中with 语句使用

参考 http://blog.sina.com.cn/s/blog_9e0bd57301016mru.html

多个子句时,

with branch_total(branch_name,val)as

(select branch_name,sum(balance)

fro m account

group by branch_name),    亮脊宴         //逗号不可少

branch_total_avg(val)as

(select avg(val)

fro m branch_total)

select branch_name

fro m branch_total,branch_total_avg

where branch_total.val>=branch_total_avg.val

并且上一条敬银语句必须以‘;’结尾野塌

‘肆’ 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

(4)sql语句with的用法扩展阅读

定义和使用递归 CTE 指南

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

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

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

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

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

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

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

‘伍’ 下面SQL 中的;with 是什么意思,为什么一定要加上':with'呢,起什么作用呢。

SQL 语句里面的 with
是使用在 CTE 上面的

CTE(Common Table Expression) ,即公用表表达式,可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE ⅥEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。

‘陆’ java query dsl 表连接处理 为什么sql语句中带with

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。

‘柒’ 下面SQL 中的;with 是什么意思,为什么一定要加上':with'呢,起什么作用呢。

你好!
多句可以直接写在一起,不需要分号
分号是某种特定的编程软件所有的,并不是标准的sql语法
比如mssql多句可以这样写
select
*
from
a
select
*
from
b
直接接起来,不需要分号
仅代表个人观点,不喜勿喷,谢谢。

‘捌’ 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

‘玖’ SQL SERVER里面的with语句有什么作用用过的师兄请帮忙

with 是公用表表达式(CTE),它是一个在查询中定义的临时命名结果集将在from子句中使用它。每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存。可以使用CTE来执行递归操作。

with 自己起的名字 as
(
select * from 表名
)
select * from 自己起的名字

‘拾’ 问一下关于SQL语句的问题,with什么意思,别的都是什么意思,谢谢!!

with as 得到的数据是一次性使用的临时数据。其中with 不是单独一个意思,跟as组合起来后成为一个短语。

举个例子:
with [abc] as(……)
select …… from [abc] where 条件A
select …… from [abc] where 条件B
以上语句在执行时,条件A的语句能取到数;取完数后 临时数据[abc]就清除了;所以到条件B的语句就执行不下去了。

热点内容
服务器网卡硬件型号怎么看 发布:2024-05-19 18:36:41 浏览:665
修改pve服务器ip 发布:2024-05-19 18:31:52 浏览:468
微信密码忘记了如何取出里面的钱 发布:2024-05-19 18:27:35 浏览:329
vs2005反编译 发布:2024-05-19 18:26:34 浏览:363
ug启动语言脚本 发布:2024-05-19 18:25:57 浏览:874
缓存服务器技术 发布:2024-05-19 18:25:56 浏览:885
androidlistview横向 发布:2024-05-19 18:21:02 浏览:704
多看ftp 发布:2024-05-19 18:11:31 浏览:543
给定一个算法 发布:2024-05-19 17:50:08 浏览:864
恋爱生物种离线缓存 发布:2024-05-19 17:49:15 浏览:579