SQL中 with as 的用法——使用公用表表达式(CTE)
公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。 CTE 可用于: 创建递归查询。 在不需要常规使用视图时替换视图,也就是说,不必将定义存储在元数据中。 启用按从标量嵌套 select 语句派生的列进行分组,或者按不确定性函数或有外部访问的函数进行分组。 在同一语句中多次引用生成的表。 使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。查询可以分为单独块、简单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时 CTE,直到生成最终结果集。 可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTE。 CTE 的结构 CTE 由表示 CTE 的表达式名称、可选列列表和定义 CTE 的查询组成。定义 CTE 后,可以在 SELECT、INSERT、UPDATE 或 DELETE 语句中对其进行引用,就像引用表或视图一样。CTE 也可用于 CREATE VIEW 语句,作为定义sql中delete用法 SELECT 语句的一部分。 CTE 的基本语法结构如下: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) 只有在查询定义中为所有结果列都提供了不同的名称时,列名称列表才是可选的。 运行 CTE 的语句为: SELECT <column_list> FROM expression_name 示例: with s_name as ( select s.name, sc.ade from SQL Server student AS s,sc where s.s#=sc.s# ) select * from s_name 在使用CTE时应注意如下几点: 1. CTE后面必须直接跟使用CTE的SQL语句(如select、insert、update等),否则,CTE将失效。 2. CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔。 3. 如果CTE的表达式名称与某个数据表或视图重名,则紧跟在该CTE后面的SQL语句使用的仍然是CTE,当然,后面的SQL语句使用的就是数据表或视图了。 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 用在属于批处理的一部分的语句中,那么在它之前的语句必须以分号结尾 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论