欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      Sql Server2005 Transact-SQL 新兵器學習總結之-公用表表達式(CTE)

      時間:2019-05-15 09:46:14下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關的《Sql Server2005 Transact-SQL 新兵器學習總結之-公用表表達式(CTE)》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Sql Server2005 Transact-SQL 新兵器學習總結之-公用表表達式(CTE)》。

      第一篇:Sql Server2005 Transact-SQL 新兵器學習總結之-公用表表達式(CTE)

      公用表表達式是Sql Server2005新增加的一個非常好用的功能。

      公用表表達式(CTE)可以認為是在單個 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 語句的執(zhí)行范圍內定義的臨時結果集。

      CTE 與派生表類似,具體表現(xiàn)在不存儲為對象,并且只在查詢期間有效。與派生表的不同之處在于,CTE 可自引用,還可在同一查詢中引用多次。

      CTE可用于:

      1.創(chuàng)建遞歸查詢(我個人認為CTE最好用的地方)2.在同一語句中多次引用生成的表 CTE優(yōu)點: 使用 CTE 可以獲得提高可讀性和輕松維護復雜查詢的優(yōu)點。

      查詢可以分為單獨塊、簡單塊、邏輯生成塊。之后,這些簡單塊可用于生成更復雜的臨時 CTE,直到生成最終結果集。

      CTE可使用的范圍:

      可以在用戶定義的例程(如函數(shù)、存儲過程、觸發(fā)器或視圖)中定義 CTE。

      下面看一個簡單的CTE例題:

      把test表中salary最大的id記錄保存在test_CTE中,再調用

      with test_CTE(id,salary)as(select id ,max(salary)from test group by id)select * from test_cte

      由上面例題可以看出:

      CTE 由表示 CTE 的表達式名稱、可選列列表和定義 CET 的查詢組成。

      定義 CTE 后,http://mmm.qqq23.com 可以在 SELECT、INSERT、UPDATE 或 DELETE 語句中對其進行引用,就像引用表或視圖一樣。簡單的說CTE可以替代臨時表和表變量的功能。

      我個人認為cte最好用的地方是創(chuàng)建遞歸查詢,下面演示一下這功能: 現(xiàn)有一數(shù)據結構如下:

      這些數(shù)據存放在表Co_ItemNameSet中,表結構和部分數(shù)據如下: ItemId ParentItemId ItemName 2 0 管理費用 3 0 銷售費用 4 0 財務費用 5 0 生產成本 35 5 材料 36 5 人工 37 5 制造費用 38 35 原材料 39 35 主要材料 40 35 間輔材料 41 36 工資 42 36 福利 43 36 年獎金

      現(xiàn)在需求是:我想查詢ItemId=2,也就是管理費用和其下屬所有節(jié)點的信息 通過CTE可以很簡單達到需求要的數(shù)據

      為了體現(xiàn)CTE的方便性,我特意也寫了一個sql2000版本的解決方法,先看看sql2000是怎么解決這個問題的

      --sql2000版本 DECLARE @i INT SELECT @i=2;http://004km.cn /* 使用臨時表作為堆棧來跟蹤所有正在處理中的項目(已經開始但尚未結束)。某個項目一旦處理完畢,將被從堆棧中刪除。當發(fā)現(xiàn)新的項目時,這些項目將被添加到堆棧中。*/

      CREATE TABLE #tem([ItemId] [INT] NOT NULL, [level] INT);/* 存放結果 */

      CREATE TABLE #list([ItemId] [INT] NOT NULL, [ParentItemId] [INT] NOT NULL DEFAULT((0)), [ItemName] [nvarchar](100)NOT NULL DEFAULT(''), [level] INT);

      INSERT INTO #tem([ItemId],[level])SELECT ItemId, 1 FROM Co_ItemNameSet WHERE itemid=@i

      INSERT INTO #list([ItemId],[ParentItemId],[ItemName],[level])SELECT ItemId, ParentItemId, ItemName ,1 FROM Co_ItemNameSet WHERE itemid=@i

      DECLARE @level INT SELECT @level=1

      DECLARE @current INT SELECT @current=0

      /* 當 @level 大于 0 時,執(zhí)行以下步驟:

      1.如果當前級別(@level)的堆棧中有項目,就選擇其中一個,并稱之為 @current。2.從堆棧中刪除該項目以免重復處理它,然后將其所有子項目添加到堆棧的下一級(@level + 1)中。

      3.如果有子項目(IF @@ROWCOUNT > 0),則下降一級處理它們(@level = @level + 1);否則,繼續(xù)在當前級別上處理。

      4.最后,如果在當前級別的堆棧中沒有待處理的項目,則返回到上一級,看上一級是否有待處理的項目(@level = @level-1)。當再沒有上一級時,則完畢。*/

      WHILE(@level>0)BEGIN

      SELECT @current=ItemId FROM #tem WHERE [level]=@level

      IF @@ROWCOUNT>0

      BEGIN

      --從堆棧中刪除該項目以免重復處理它

      DELETE FROM #tem WHERE [level]=@level and ItemId=@current

      --將其所有子項目添加到堆棧的下一級(@level + 1)中。

      INSERT INTO #tem([ItemId],[level])SELECT [ItemId],@level+

      1FROM Co_ItemNameSet WHERE ParentItemId=@current

      --將其所有子項目添加

      INSERT INTO #list([ItemId],[ParentItemId],[ItemName],[level])SELECT [ItemId],[ParentItemId],[ItemName] ,@level+1

      FROM Co_ItemNameSet WHERE ParentItemId=@current

      IF @@rowcount>0

      BEGIN

      SELECT @level=@level+1

      END

      END

      ELSE

      BEGIN

      SELECT @level=@level-1

      END END--顯示結果

      SELECT * FROM #list

      DROP TABLE #tem DROP TABLE #list go

      結果如下:

      ItemId ParentItemId ItemName level 2 0 管理費用 1 52 2 汽車費用 2 55 2 招聘費 2 56 2 排污費 2 53 52 燃料 3 54 52 輪胎 3

      大家看到sql2000解決這個問題比較麻煩,要實現(xiàn)這需求編寫的代碼比較多,比較復雜 現(xiàn)在好了,在sql2005中通過CTE的遞歸特點可以2步就實現(xiàn).得到同樣的結果,sql2005的CTE代碼簡單了許多.這就是CTE支持遞歸查詢的魅力。請看下面的代碼:

      --sql2005版本 DECLARE @i INT SELECT @i=2;

      WITH Co_ItemNameSet_CTE(ItemId, ParentItemId, ItemName,Level)AS(SELECT ItemId, ParentItemId, ItemName ,1 AS [Level]

      FROM Co_ItemNameSet WHERE itemid=@i

      UNION ALL

      SELECT c.ItemId, c.ParentItemId, c.ItemName ,[Level] + 1 FROM Co_ItemNameSet c INNER JOIN Co_ItemNameSet_CTE ct ON c.ParentItemId=ct.ItemId)

      SELECT * FROM Co_ItemNameSet_CTE go

      Sql Server2005 Transact-SQL 新兵器學習總結之-TOP 運算符

      TOP 運算符介紹:

      TOP 運算符在Sql Server2005得到了增強,可以使用任何數(shù)值表達式(如變量名),而不是僅使用整數(shù)來指定該運算符返回的行數(shù)。TOP 現(xiàn)在還可以在 INSERT、UPDATE 和 DELETE 語句中指定。TOP 運算符的幾個使用總結:

      1.TOP 表達式可用在 SELECT、INSERT、UPDATE 和 DELETE 語句中。2.Top表達式可以是常量,變量,子查詢

      3.取代set rowcount,可以防止鎖升級,提高效率

      特別提示: 與INSERT、UPDATE 或 DELETE 一起使用的 TOP 表達式中被引用行將不按任何順序排列。

      TOP n 隨機返回 n 行。

      例如,下面的 INSERT 語句包含 ORDER BY 子句,但該子句并不影響由 INSERT 語句直接引用的行。請看例題:

      有1個test表,表結構和表中數(shù)據如下: select * from test

      id salary manid 100 6500 100 200 5500 200 101 6600 100 102 6200 100 103 5100 100 104 6700 100 201 5800 200 202 4200 200 執(zhí)行下面的語句:

      declare @t table(id int,salary int,manid int)

      INSERT TOP(2)INTO @t SELECT id, salary, manid from test ORDER BY salary asc

      select * from @t

      結果如下:

      id salary manid 100 6500 100 200 5500 200

      上個查詢中的 ORDER BY 子句僅引用嵌套 SELECT 語句返回的行。INSERT 語句選擇 SELECT 語句返回的任意兩行。

      若要確保插入 SELECT 子查詢返回的前兩行,可以按如下寫該查詢。

      declare @t table(id int,salary int,manid int)

      INSERT INTO @t

      SELECT TOP(2)id, salary, manid from test ORDER BY salary asc

      select * from @t

      結果如下:

      id salary manid 202 4200 200 103 5100 100

      TOP 運算符在Sql Server2005得到了增強,Top表達式可以是常量,變量,子查詢

      下面我們再來看另個例題:

      create table test2([no] int , n nvarchar(100))

      insert into test2([no],n)select 1,'a' union select 2,'b' union select 3,'c' union

      select 3,'c2' union

      select 2,'b2' union

      select 2,'b3' go

      select * from test2 order by [no] asc go

      結果如下: no n 1 a 2 b 2 b2 2 b3 3 c 3 c2

      1.利用top變量,篩選no最小的2行

      --利用top變量,篩選no最小的2行 declare @i int select @i = 2 select top(@i)* from test2 order by [no] asc go

      結果如下: no n 1 a 2 b 我們可以看到,在Sql Server2005中top后面跟的可以是變量了,而在Sql Server2000中必須是常量才可以

      要在Sql Server2000實現(xiàn)上述功能比較麻煩,需要用到動態(tài)sql語句,請看下面代碼:

      --Sql Server2000版本 declare @i int select @i = 2

      declare @sql nvarchar(255)select @sql=''

      select @sql='select top('+ convert(nvarchar(100),@i)+')* from test2 order by [no] asc' exec(@sql)

      2.利用top子查詢來篩選 select top(select count([no])from test2 where [no]=3)* from test2 order by [no] asc go

      結果如下: no n 1 a 2 b

      3.WITH TIES參數(shù):

      指定從基本結果集中返回更多的行,返回的行與TOP n(PERCENT)行中的最后一行在ORDER BY 列中具有相同的值。

      只有在指定ORDER BY 子句之后才能指定TOP WITH TIES。

      --返回no前2行,并還返回no=2的行 select top(2)WITH TIES * from test2 order by [no] asc go

      第二篇:中小學信息技術“在Excell中制作圖表”的講授新課與歸納總結之學習總結

      中小學信息技術“在Excell中制作圖表”的講授新課與歸納總結

      學習總結

      我聽了溫曉捷老師主講的中小學信息技術《“在Excell中制作圖表”的講授新課與歸納總結》。知道了這節(jié)課是從課堂教學中的主要環(huán)節(jié)——教授新課;如何分段掌控課堂教學時間;教學過程與師生互動的對應關系;“總結歸納”教學環(huán)節(jié)的意義;常用的“總結歸納”形式;“課后作業(yè)”的三個功能。六個角度對課堂教學五個環(huán)節(jié)中的講授新課、歸納總結和布置課后作業(yè)進行了探討。并且對這節(jié)課做了相關的筆記。

      然后看了宋東艷老師設計的《 Excel中制作圖表》一課,詳細的介紹教學的各個環(huán)節(jié)和總結歸納的形式和意義。本課的教學始終圍繞著“圖表的作用和圖表類型的選擇”教學重點展開。通過一環(huán)套一環(huán)的教學活動及恰當?shù)娜蝿赵O計,將圖表的作用闡述的明白清晰,讓學生很清楚地掌握了柱型圖、餅圖、折線圖常用的范圍。很好地調動了學生的學習積極性和興趣,充分說明教師對學生情況十分了解,能依據學生特點,選用適當?shù)慕虒W手段,因此收到了良好的教學效果。從而使自己地溫曉捷老師的專題講座有了進一步的理解。

      同時我與一起的學員進入了交流,且回答了“思考與活動”板塊的相關問題??傊ㄟ^聽講、析案、交流、回答問題,感覺對本講座的認識提高了一個層次,且提高自己的教育理論水平,讓自己的遠程培訓走入了一新的階段。

      下載Sql Server2005 Transact-SQL 新兵器學習總結之-公用表表達式(CTE)word格式文檔
      下載Sql Server2005 Transact-SQL 新兵器學習總結之-公用表表達式(CTE).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內容由互聯(lián)網用戶自發(fā)貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發(fā)現(xiàn)有涉嫌版權的內容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯(lián)系你,一經查實,本站將立刻刪除涉嫌侵權內容。

      相關范文推薦