zoukankan      html  css  js  c++  java
  • sql中with as的用法练习

    在工作中经常看到有人使用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脚本,方便以后随时练习:

     1 create table #Dept
     2  (
     3    ID INT,
     4    Name nvarchar(30)
     5  )
     6  insert #Dept
     7  select 1,'上海一区'
     8  union all
     9  select 2,'苏州一区'
    10  union all
    11  select 3,'南京一区'
    12  union all
    13  select 4,'上海二区'
    14  union all
    15  select 5,'苏州二区'
    16  union all
    17  select 6,'南京二区'
    18 
    19 
    20 
    21 create table #Proj
    22 (
    23   ID INT,
    24   DeptID INT,
    25   Name nvarchar(30)
    26 )
    27 
    28 
    29 insert #Proj
    30 select 1,1,'九寨沟旅游'
    31 union all
    32 select 2,2,'黄山探险'
    33 union all
    34 select 3,5,'月光码头自助'
    35 union all
    36 select 4,5,'海底捞火锅'
    37 union all
    38 select 5,6,'睡大觉'
    39 union all
    40 select 6,3,'看电影'
    41 union all
    42 select 7,2,'长白山旅游'
    43 union all
    44 select 8,5,'香港维多利亚坐船'
    45 union all
    46 select 9,2,'发奖金啦'
    View Code

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

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

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

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

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

    来一段递归查询的例子:

     1 create table #ff
     2 (
     3   ID int,
     4   ParentID int,
     5   Name nvarchar(20)
     6 )
     7 
     8 insert #ff
     9 select 1,0,'江苏省'
    10 union all
    11 select 2,1,'苏州市'
    12 union all
    13 select 3,2,'高新区'
    14 union all
    15 select 4,3,'东渚镇'
    16 union all
    17 select 5,0,'浙江省'
    18 union all
    19 select 6,5,'杭州市'
    20 union all
    21 select 7,6,'萧山区'
    View Code

    效果图:

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

  • 相关阅读:
    ORACLE存储过程调用Web Service
    企业管理应具备哪些软件
    ZROI Day6比赛总结
    UOJ 449 【集训队作业2018】喂鸽子 【生成函数,min-max容斥】
    Atcoder Rating System
    Luogu4688 [Ynoi2016]掉进兔子洞 【莫队,bitset】
    UOJ450 【集训队作业2018】复读机【生成函数】
    Luogu5071 [Ynoi2015]此时此刻的光辉 【莫队】
    Luogu4689 [Ynoi2016]这是我自己的发明 【莫队】
    CF891C Envy【最小生成树】
  • 原文地址:https://www.cnblogs.com/hshuai/p/3947424.html
Copyright © 2011-2022 走看看