在工作中经常看到有人使用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. 关于WebView的内存泄露问题

    在一个Activity中包含着一个WebView,通过WebView不停的访问Web页面,会发现内存会一直增长,退出此Activity,甚至杀死此Activity,内存依然没有被释放.这就导致,即使是 ...

  2. php文字水印和php图片水印实现代码

    本文章向码农们介绍php文字水印和php图片水印实现代码,需要的码农可以参考一下. php 文字水印 文字水印就是在图片上加上文字,主要使用gd库的imagefttext方法,并且需要字体文件. 实现 ...

  3. Kung fu

    1. originPeople in Primitive society(原始社会)in order to survive,they have to hunt for food efficiently ...

  4. jQuery与Ajax

    Ajax简介 : Asynchronous Javascript And XML (异步的JavaScript和XML) AJAX 不是新的编程语言,而是一种使用现有标准创建快速动态网页的技术. 通过 ...

  5. HDU1232畅通工程

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1232 #include<stdio.h> #include<string.h> ...

  6. svn提交自动同步到web目录

    环境:CentOS6.5  测试线   svn和web服务器在同一台机器上   SVN版本1.6 情景:在测试环境下,开发部提出希望提交到SVN的代码能自动同步到WEB站点目录下,解决每次都要传双份这 ...

  7. 循环链表Josephus问题(c,cpp)

    问题描述: 设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m个的人出列,然后从出列的下一个人重新开始报数,数到第m个的人又出列,.......,如此反复直到所有的人出列为止. Joseph ...

  8. hive安装(一)

    1.解压 [root@cluster3 hadoop]# tar -zxvf apache-hive--bin.tar.gz 2.修改环境变量 export HIVE_HOME=/usr/local/ ...

  9. 在Web中实现C/S模式的Tab

    在探讨C/S模式的Tab之前,我们先总结一下B/S模式的Tab通常是什么样的.web中常见的tab设计通常是用于分节展示大量信息以提高页面空间的利用率,而且这些信息通常是静态的,或者交互比较简单.通过 ...

  10. 二十、ValueStack的常用方法

    二十.ValueStack的常用方法 void set(String key,Object value):先获取根栈栈顶的Map,如果不存在,压入一个新的Map public String execu ...