国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SQL Server數據庫中簡單的SELECT TOP

數據庫 SQL Server
我們今天要來談談SQL數據庫中"簡單的"SELECT TOP—可能有你從未注意到的細節,希望對大家有所幫助。

首先從博客園的Jerome Wong網友說起

他提出了一個這樣的問題

本人寫了好幾年SQL語句了,從來沒注意到這件事情。

例如:

數據表如下:

ID  EMPNO  NAME  AGE  

1   26929   Jerome   28
2   28394   Quince  27
3   20983   Green   30
4   27189   Mike     30
5   23167   Arishy   30
6   26371   Yager   29

我寫了SQL語句想取得第3、4筆數據,測試分頁玩的。

  1. select  top 2 * from (select top 4 * from Member ) m    
  2. order by m.RowID desc 

我執行中間那一段子查詢:select top 4 * from Member

取得的是:

1   26929   Jerome   28
2   28394   Quince  27
3   20983   Green   30
4   27189   Mike     30

但是整個SQL語句的結果卻是:

5   23167   Arishy   30
6   26371   Yager   29

真的不知道到底怎么會出現這種情況,請高手指教。

其實不管你是新手還是高手在寫程序當中經常會碰到類似這樣的細節問題

下面我就對Jerome Wong網友所提出的問題針對select top做出一系列的分析(在這里要感謝Jerome Wong網友提出的這個問題)

準備工作 

  1. if object_id('zhuisuo')is not null 
  2. drop table zhuisuo  
  3. go  
  4. create table zhuisuo  
  5. (  
  6. id int null,name varchar(20) null 
  7. )  
  8. insert into zhuisuo values(1,'追索1')  
  9. insert into zhuisuo values(2,'追索2')  
  10. insert into zhuisuo values(3,'追索3')  
  11. insert into zhuisuo values(4,'追索4')  
  12. insert into zhuisuo values(5,'追索5')  
  13. insert into zhuisuo values(6,'追索6')  
  14. insert into zhuisuo values(7,'追索7')  
  15. insert into zhuisuo values(8,'追索8')  
  16. insert into zhuisuo values(9,'追索9')  
  17. insert into zhuisuo values(10,'追索10')  
  18. go 

下面我們來簡單寫兩句Select語句

  1. select top 2 * from (select top 4 * from zhuisuo) m order by m.id desc 
  2. select top 2 * from (select top 4 * from zhuisuo order by id asc) m order by m.id desc 

執行結果大家會發現

平常很多人會認為這兩條語句執行的結果會一樣

怎么會這樣呢?

從這個查詢計劃中大家可以清楚的看到

***種掃描完zhuisuo表后先降序(top N Sort)然后在4行范圍中取前2行

第二種掃描完zhuisuo表后先升序取4行(top N Sort)然后再把這4行降序取2行(top N Sort)

在這里就不得不簡單的說說SQL語句中出現的表子查詢了

表子查詢,而出現在from子句中的表我們稱為派生表

派生表是虛擬的,未被物理具體化,也就是說當編譯的時候

如(select top 2 * from (select top 4 * from zhuisuo) m order by m.id desc )

外部查詢和內部查詢會被合并,并生成一個計劃

這時再看看上面的執行計劃就一目了然了

(注意事項:在派生表里面一般不允許使用order by除非指定了top

也就是說select top 2 * from (select * from zhuisuo order by id asc) m order by m.id desc這句語句是不能執行的)

派生表是個擬表要被外部引用,而order by返回的不是表而是游標.所以只用order by的話是被限制的

然而為什么使用top加order by又可以了

是因為top可以從order by返回的游標里選擇指定數量生成一個表并返回

接下來我再舉例關于top需要注意的細節

1、使用top返回隨機行,很多人會想到用RAND函數從而得到這樣一個語句

  1. select top 4 id,name from zhuisuo order by rand(); 

經過多次查詢后,你會失望的發現它沒有返回隨機行

這是因為每個查詢只調用它一次而不是每行調用它一次

這時我們可以把RAND改為Newid

  1. select top 4 id,name from zhuisuo order by newid(); 

這時就會得到你想要的結果了,在這里我們可以意識到NEWID具有更好的分布特性

2、注意insert中使用top

  1. insert top (4) into zhuisuo  
  2. select * from zhuisuo order by id desc 

很多網友會解釋為把zhuisuo表中***4條插入表

但執行完畢后又會讓你失望了,插入的是最前面的4條

正確的倒敘插入top方法應該是

  1. insert into zhuisuo  
  2. select  top (4) * from zhuisuo order by id desc 

這兩條語句又有什么區別

其實第上面那條語句更本就沒有排序(Top N Sort)

3、有時我想刪除數據表里面時間最近的5條數據怎么辦

delete 和update使用top的時候不能使用order by

現在我們可以這樣來解決

  1. delete zhuisuo  
  2. where id in (select top(5) id from zhuisuo order by id desc)   
  3. update zhuisuo  
  4. set name='追索'+namewhere id in (select top(5) id from zhuisuo order by id desc

這是變相實現Top N sort更新或刪除數據 但這不是***的方法因為這還要根具id去匹配

這時我們可以使用這種方法

  1. with cte_del as(select top(5) *   
  2. from zhuisuo order by id desc)  
  3. delete from cte_del  
  4. with cte_del as 
  5. (select top(5) * from zhuisuo order by id desc)  
  6. update  cte_del set name='追索'+name 

4、top除了這些還有更多的用處,就比如之前我使用Top N sort 加 apply回答過一個網友的問題

如何查詢某用戶近一個月內正確率大于60%的閱讀記錄,每天只顯示符合條件正確率***的那個

在這里我只稍微提一下關于apply 也有很多有意思的細節 今后有時間我會用隨筆形式寫出來

***附上一張關于我用序號表示邏輯查詢處理的步驟 

原文鏈接:http://www.cnblogs.com/zhuisuo/archive/2010/12/23/1914790.html

【編輯推薦】

  1. SQL Server 2000刪除實戰演習
  2. SQL Server存儲過程的命名標準如何進行?
  3. 卸載SQL Server 2005組件的正確順序
  4. 對SQL Server字符串數據類型的具體描述
  5. SQL Server數據類型的種類與應用
責任編輯:彭凡 來源: 博客園
相關推薦

2010-07-06 14:12:58

SQL Server數

2011-08-15 15:40:57

SQL Server 系統數據庫

2010-06-28 10:06:09

SQL Server數

2010-07-15 17:28:50

SQL Server

2010-07-15 15:37:13

SQL Server數

2010-07-08 15:55:25

SQL Server

2010-07-08 11:05:14

SQL Server數

2010-06-17 13:34:47

SQL Server數

2011-08-25 16:13:31

SQL Server批量替換數據

2010-11-10 15:23:55

SQL SERVER

2010-07-08 17:33:21

SQL Server數

2010-07-06 14:40:15

解決SQL Serve

2010-07-06 15:22:00

SQL Server

2011-03-24 09:24:08

SQL Server數還原

2011-03-24 09:45:34

SQL Server數恢復

2011-03-24 09:07:11

SQL Server數備份

2010-07-09 11:28:12

SQL Server數

2010-07-01 14:18:09

SQL Server數

2010-07-06 09:44:51

SQL Server數

2009-06-03 10:51:59

連接SQL數據庫Adobe Dream
點贊
收藏

51CTO技術棧公眾號

国产精品久一| 九九九九免费视频| 高清毛片在线观看| 欧美一区二区视频在线观看2020 | 国内毛片久久| 国产盗摄一区二区| 中文字幕免费精品| 久久久久久久久久久成人| 美女尤物在线视频| 91精品欧美一区二区三区综合在| 欧美男男同志| 91黄色免费版| 高清美女视频一区| 欧美在线视频不卡| av资源新版天堂在线| 亚洲免费精彩视频| 美女100%一区| 九九久久精品一区| 日韩mv欧美mv国产网站| 日韩美女在线播放| 91嫩草亚洲精品| 蜜桃臀一区二区三区| 玖玖玖国产精品| 青春草在线视频免费观看| 国产一区二区免费看| 黑鬼大战白妞高潮喷白浆| 成人欧美一区二区三区白人| 日韩电影在线观看完整版| 日韩精品一区二区三区视频在线观看| 日本在线观看网站| 成人性生交大合| 香蕉精品视频在线| aaa国产精品视频| 一区二区三区免费网站| 最近中文字幕mv第三季歌词 | 国产福利片在线| 亚洲福利视频在线| 亚洲国内精品| 在线观看导航| 九九精品视频在线| www.性欧美| xxxxx.日韩| 日本黄色播放器| 91精品国产91久久综合桃花| 四季av一区二区三区免费观看| 欧美成人一区二区在线观看| 欧美丰满少妇xxxxx高潮对白| 91免费精品| 国产理论电影在线| 国产日韩精品久久久| x99av成人免费| 嫩草伊人久久精品少妇av杨幂| 99超碰麻豆| 亚洲精品水蜜桃| 北岛玲精品视频在线观看| 日韩欧美精品久久| 日韩欧美自拍偷拍| 999亚洲国产精| 日韩免费啪啪| 欧美最大成人综合网| 欧美日韩一级黄| 欧美+亚洲+精品+三区| 日本又骚又刺激的视频在线观看| 日韩美女在线播放| 亚洲国产成人精品视频| 精品在线播放| www.日本视频| 91一区二区三区| 日韩一二三区视频| 国产老女人精品毛片久久| 日韩免费小视频| jizzjizzjizz亚洲| 2019国产精品视频| 狠狠干狠狠久久| 99re6在线精品视频免费播放| 国产又粗又爽又黄的视频| 欧美视频一区二区三区在线观看 | 2020国产成人综合网| 国产精品流白浆在线观看| 午夜视频在线免费| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美一区二区三区成人| 免费日韩电影| 96久久精品| av中文一区二区三区| www.成人.com| 久久久久久久久久久网站| 免费视频一区| 免费观看又污又黄在线观看国产| 亚洲美女av在线| 国产字幕视频一区二区| 亚洲国产精品久久久久婷蜜芽| 欧美日韩国产高清一区二区三区 | 日本aa大片在线播放免费看| 亚洲天堂第二页| 伊人情人网综合| 欧美午夜精品久久久久久人妖| 成人影院网站ww555久久精品| 日本在线播放不卡| 同产精品九九九| 国产伦精品一区二区三区免费优势| 亚洲日本欧美在线| 欧美亚洲一区三区| 精品久久影院| 欧美女人性生活视频| 日韩情涩欧美日韩视频| 亚洲一区欧美| 黄动漫视频高清在线| 午夜精品国产精品大乳美女| 东方aⅴ免费观看久久av| 超碰91在线观看| 久久久久久久久一区二区| 激情成人中文字幕| 日韩精品免费一区二区夜夜嗨 | 欧美激情中文网| 国产成人av福利| 国产美女高潮在线观看| 久久久免费看| 欧美日韩在线观看一区二区| 欧美日韩激情在线一区二区三区| 高清一区二区视频| 久久91亚洲人成电影网站| 成人午夜免费电影| 欧美暴力调教| 成人免费网站入口| 在线国产精品播放| 国产麻豆精品在线| 99久久精品一区二区成人| 国产91在线亚洲| 在线不卡国产精品| 91一区二区三区在线播放| 国产 日韩 欧美| 色www免费视频| 欧美又大又硬又粗bbbbb| 日韩一区欧美一区| 色综合综合色| 欧美日本网站| 明星裸体视频一区二区| 亚洲高清福利视频| a在线播放不卡| 亚洲精品在线国产| 99视频资源网| 国产精品亚洲自拍| 欧美午夜在线一二页| 香蕉亚洲视频| 亚洲精品国产精品国产| 欧美深夜福利视频| 久久青草福利网站| 一区二区三区四区五区视频在线观看| 视频一区在线观看| 九色蝌蚪在线| 一区二区精品视频| 在线成人中文字幕| 亚洲欧洲www| 欧美天天在线| 国产高清不卡| 羞羞免费视频网站| 99精彩视频| 亚洲欧美精品中文字幕在线| 国产日韩欧美电影| 欧美韩国一区| 牛牛电影国产一区二区| av黄色在线网站| 国产精品成av人在线视午夜片| 在线观看亚洲一区| 国产成人av电影在线播放| 伊人久久大香线蕉综合网蜜芽| 青青青草原在线| 亚洲欧美日产图| 色在人av网站天堂精品| 色婷婷综合视频在线观看| 国产69精品久久99不卡| 奇米影视亚洲| 伊人色综合一区二区三区影院视频| 亚洲精品怡红院| 精品欧美一区二区三区久久久| 中文字幕一区二区精品| 亚洲国产婷婷综合在线精品| 日本成人中文字幕在线视频| 一区二区三区国产好| 蜜芽在线免费观看| 日本a√在线观看| 久久精品人成| 97精品在线视频| 精品国产一区二区三区四区四| 国产精品天美传媒| 日韩成人免费电影| 精品福利久久久| 国产精品高清乱码在线观看| 日韩欧美亚洲| 大西瓜av在线| 国产专区一区二区三区| 欧美国产视频日韩| 亚洲成人激情视频| 欧美日韩国产中字| 91麻豆精品在线观看| 久久国产66| 成人在线电影在线观看视频| 久久久久久久性潮| 巨大荫蒂视频欧美另类大|