SQL 基礎 :Distinct 和 order by 關系。(Distinct 自動排序)


  今天本來是測試一段代碼,然后用到Distinct關鍵字,查看執行計划之后,突然發現過程中有對表進行sort! 上網搜索和加之驗證得出如下結果:

   結論:

  1.使用distinct 關鍵字后會對distinct后面用到的關鍵字進行默認的升序排序.

  2.可以使用order by 來改變排序規則.

  3.使用distinct后,出現在order by 中的字段必須要寫在 SELECT 句中,非充要條件。


 

  求問各大神:如何消除distinct自動排序,及為什么要進行排序,還有distinct是如何做到消除重復列的!

  另:

  

//Wrong SQL
SELECT DISTINCT field_1,field_2 FROM Table ORDER BY field_0
//Reason
ORDER BY 子句與 (OrderIndex) DISTINCT 沖突
//Solve Method
SELECT field_1,field_2 FROM Table GROUP BY field_1,field_2 ORDER BY Min(field_0)

 

 

  Group by 語句好像也要自動進行排序,求真相???

  


 

  測試數據如下:

 1 CREATE TABLE Student (id int identity(0,1), name nvarchar(20) ,course nvarchar(20) , score int)
 2 DROP TABLE Student
 3 insert into Student values
 4 ('張三','語文',81),
 5 ('張三','數學',75),
 6 ('李四','語文',76),
 7 ('李四','數學',90),
 8 ('王五','語文',81),
 9 ('王五','數學',100),
10 ('王五','英語',90)

   執行  SQL : SELECT   distinct S.name ,S.score FROM Student S ;

   查看執行計划結果如下:

 

 

  可以看到在sort階段,分別對name和score兩個字段進行升序排序!


 

  執行  SQL : SELECT   distinct S.name ,S.score FROM Student S ;

  查看執行計划結果如下:

 

 

   對score 和name 分別 降序和升序排序!


  執行  SQL :SELECT   distinct S.name ,S.score FROM Student S order by S.score desc ,S.course;

  查看執行計划結果如下:

 

  解析成功,但執行錯誤!

  

 


免責聲明!

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



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