在工作中经常看到有人使用with as,查询很顺畅,也很快,很好奇,在网上也有不少资料,看了大神的文章,也练习一下。

首先给出两位位大神文章的链接,介绍十分详细:http://www.cnblogs.com/fygh/archive/2011/08/31/2160266.html

另一位大神的文章:http://www.cnblogs.com/CareySon/archive/2011/12/12/2284740.html

为了自己更好地理解,还是老实练习一下(概念方面的请参考上面的链接):

sql脚本,方便以后随时练习:

 create table #Dept
(
ID INT,
Name nvarchar()
)
insert #Dept
select ,'上海一区'
union all
select ,'苏州一区'
union all
select ,'南京一区'
union all
select ,'上海二区'
union all
select ,'苏州二区'
union all
select ,'南京二区' create table #Proj
(
ID INT,
DeptID INT,
Name nvarchar()
) insert #Proj
select ,,'九寨沟旅游'
union all
select ,,'黄山探险'
union all
select ,,'月光码头自助'
union all
select ,,'海底捞火锅'
union all
select ,,'睡大觉'
union all
select ,,'看电影'
union all
select ,,'长白山旅游'
union all
select ,,'香港维多利亚坐船'
union all
select ,,'发奖金啦'

现在的需求是:找出要求部门包含“苏州”的项目表中的数据,一般来说,这样的需求一个简单的子查询就可以了,如下:

这只是嵌套了一层子查询,不太复杂,如果多层,可读性就很差,大神使用了这样一种方式:

这种方式虽然容易维护,但会带来性能上的损失,毕竟为了一个查询建了一张表嘛。

下面隆重祭出CTE:公用表表达式。

使用with as的注意事项,请参看链接文章。

来一段递归查询的例子:

 create table #ff
(
ID int,
ParentID int,
Name nvarchar()
) insert #ff
select ,,'江苏省'
union all
select ,,'苏州市'
union all
select ,,'高新区'
union all
select ,,'东渚镇'
union all
select ,,'浙江省'
union all
select ,,'杭州市'
union all
select ,,'萧山区'

效果图:

这里要注意一下,union all 后面必须要跟bb.,否则会报错。

sql中with as的用法练习的更多相关文章

  1. SQL中EXISTS和IN用法

    SQL中EXISTS的用法  指定一个子查询,检测行的存在. 语法:EXISTS subquery 参数:subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INT ...

  2. SQL中DATENAME函数的用法

    在SQL数据库中有多种函数,下面就将为您介绍其中的DATENAME函数的用法,供您参考,希望对您学习SQL中函数的用法能有所帮助. 在SQL数据库中,DATENAME函数的作用是是从日期中提取指定部分 ...

  3. 【SQL】SQL中Case When的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 ' T ...

  4. SQL中SUBSTRING函数的用法

    功能:返回字符.二进制.文本或图像表达式的一部分 语法:SUBSTRING ( expression, start, length ) SQL 中的 substring 函数是用来抓出一个栏位资料中的 ...

  5. Sql Server REPLACE函数的使用;SQL中 patindex函数的用法

    Sql Server REPLACE函数的使用 REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法REPLACE ( ''string_replace1'' ...

  6. SQL中的CASE的用法

    CASE在SQL语句中,很有点类似java等高级编程语言中的switch这样子的多分枝语句,但是有点不同的是,case后面接的是when,另外,when的后续分枝有点类似if后面接else.这个是我的 ...

  7. SQL中的CASE WHEN用法

    其语法如下: 1)case vlaue when [compare-value]then reslut [when[compare-value]] then result ...] [else res ...

  8. SQL 中With as 的用法

    转自:http://www.cnblogs.com/superyinhai/archive/2010/04/09/1708643.html 一.WITH AS的含义 WITHAS短语,也叫做子查询部分 ...

  9. SQL中 patindex函数的用法

    语法格式:PATINDEX ( '%pattern%' , expression ) 返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算. pattern字符串在 ...

随机推荐

  1. locals()函数访问当前还在作用范围内的局部变量

    >>> element = 'silver' >>> number = 47 >>> 'Element {number} is {element} ...

  2. 下载和使用 Open XML PowerTools

    安装 Open XML SDK 2.5 首先,需要安装 Open XML SDK 2.5 ,从这个地址下载安装程序:http://www.microsoft.com/en-in/download/de ...

  3. LeetCode:237

    题目:Delete Node in a Linked List(从列表中删除指定结点) 描述:Write a function to delete a node (except the tail) i ...

  4. oracle 索引失效原因

    转自  http://www.cnblogs.com/orientsun/archive/2012/07/05/2577351.html Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时 ...

  5. bzoj1216 [HNOI2003]操作系统

    1216: [HNOI2003]操作系统 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 751  Solved: 419[Submit][Status ...

  6. 09_platform-tools简介&常见adb指令

    SDK下面的文件夹说明add-ons 附加的附属的一些信息.docs Android开发的帮助文件.extras 支持的jar包,高版本兼容底版本.google usb的驱动.platforms 存放 ...

  7. NULL值比较,两个列的合并,列值按条件替换。

    show create table 表名 -- 显示创建表的sql语句. 为已有的表增加新列.alter table 表名 add 列名 int NULL -- 此行加了一个int 类型 默认可以nu ...

  8. WF4 持久化 <第四篇>

    一.基础示例 WF4 默认支持SQLServer的持续化,首先要执行目录C:\Windows\Microsoft.NET\Framework\v4.0.30319\SQL\en下的脚本: SqlPer ...

  9. 【.NET】对文件的对称加密

    using System;using System.IO;using System.Security.Cryptography;namespace ConsoleApp_SymmetricalEncr ...

  10. 使用c#数据库连接池

    摘自: http://www.wxphp.com/wxd_0fetn2bw2548fsc2ak8h_1.html 导读:使用C#数据库连接池,连接到数据库服务器通常由几个需要软长时间的步骤组成,必须与 ...