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.,否則會報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM