摘要:
SQL Server 2005 新增 cross apply 和 outer apply 联接语句,SQL Server 2000 中有个 cross join 是用于交叉联接的.增加 cross apply 和 outer apply 是用于交叉联接表值函数(返回表结果集的函数)的,更重要的是这个函数的参数是另一个表中的字段。这个解释可能有些含混不请,请看下面的例子:1. cross join 联接两个表 select * from TABLE_1 as T1 cross join TABLE_2 as T2 2. cross join 联接表和表值函数,表值函数的参数是个“常量” s... 阅读全文
摘要:
由于程序员所在公司环境不太一样,所以造成程序员在IT技能方面有比较大的差别。例如有些公司,程序员大多只关心业务逻辑处理或者是页面UI,当然我指的是web应用程序相关的程序员。因为有可能所有的底层数据都由其它同事给你提供,这样就造成一旦需要自己写数据库脚本查询时,那些难以想像的,丑陋的SQL就出来了,不过如果我们稍加注意,就会知道SQL 2005的CTE在很大程序上能解决这种境况,这就看程序员的自身提高意识了。 一提到SQL的CTE,大家很有可能第一反应就是它强大的递归查询,但我这里并不想讲这方面知识。 先来看下它的定义:指定临时命名的结果集,这些结果集称为公用表表达式 (CTE)。该表达式源自 阅读全文
摘要:
一.WITH AS的含义WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到。有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。 特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可。如果WITH AS短语所定义的表名被调用两次以上,则优化器会自动将WITH AS短语所获取的数据放入一个TEMP表里,如果只是被调用一次 阅读全文
摘要:
可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。 CTE可用于: 1.创建递归查询(我个人认为CTE最好用的地方) 2.在同一语句中多次引用生成的表 CTE优点: 使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。 查询可以分为单独块、简单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时 CTE,直到生成最终结果集。 CTE可使用的... 阅读全文