查詢 31到40條記錄 的各種玩法


 

平常工作,尤其是面試中經常遇到這樣一個問題,查詢表A中31到40條的記錄,ID可能是不連續的。(via:女孩禮物網)

    1. 如果ID連續

      select * from A where ID between 31 and 40

       

    2. 如果ID不連續,提供三種寫法

       

      --兩次對表A查詢效率較低
      select top 10 * from A where ID not in (select top 30 ID from A)

       

      --外層查詢沒有對表A查詢,效率大有提高
      select top 10 * from (select top 40 * from A order by ID) as t order by t.ID desc

       

      --ROW_NUMBER()函數效率更高,sqlserver2005以及以上版本中才可以使用
      select * from (select ROW_NUMBER() over(order by ID) as 'sequence',A.*  from A ) as t where t.sequence between 31 and 40

       

 不知道還有沒有其他寫法,我在此拋出一塊磚 ……

 


 

不一會兒,就接到幾塊玉(期待更多的玉):

 

@金色海洋(jyk)陽光男孩

--如果是海量數據做查詢的話,這個是更高效的,這個不錯
select
top 10 * from A where id in (select top 10 id from (select top 40 id from A order by ID desc) as t order by t.ID ) order by A.ID desc

 

       @害怕飛的鳥

--這哥們給出了sql2012的新寫法,我機器上沒裝這么前衛的工具,在我老大的機器上測試可行,性能效率暫不明確
SELECT * FROM A Order by ID OFFSET 30 ROWS FETCH NEXT 10 ROWS ONLY

 

 


免責聲明!

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



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