深入理解Oracle中distinct關鍵字


  distinct這個關鍵字來過濾掉多余的重復記錄只保留一條,但往往只用它來返回不重復記錄的條數,而不是用它來返回不重記錄的所有值。其原因是distinct只有用二重循環查詢來解決,而這樣對於一個數據量非常大的站來說,無疑是會直接影響到效率的。

  distinct 會對返回的結果集進行排序,所以,最好和order by 結合使用,可以提高效率。

 

一、distinct 基本用法

  1.用於單列

   1 select distinct name from A 

  執行后結果如下:

  

  

  2.作用於多列

   1 select distinct name, id from A 

  執行后結果如下:

  

  實際上是根據name和id兩個字段來去重的,這種方式Access和SQL Server同時支持。

 

   1 select distinct xing, ming from B 

  

  返回的結果為兩行,這說明distinct並非是對xing和ming兩列“字符串拼接”后再去重的,而是分別作用於了xing和ming列。

  

  3.COUNT統計

   1 select count(distinct name) from A; --表中name去重后的數目, SQL Server支持,而Access不支持 

  count是不能統計多個字段的,下面的SQL在SQL Server和Access中都無法運行。

   1 select count(distinct name, id) from A; 

  若想使用,請使用嵌套查詢,如下:

   1 select count(*) from (select distinct xing, name from B) AS M; 

  同時,也可以這樣查詢所有字段,只對單一字段去重

   1 select *, countdistinct name) from table group by name 

  

  4.distinct必須放在開頭

   1 select id, distinct name from A; --會提示錯誤,因為distinct必須放在開頭 

  

  5.其他

  distinct語句中select顯示的字段只能是distinct指定的字段,其他字段是不可能出現的。例如,假如表A有“備注”列,如果想獲取distinc name,以及對應的“備注”字段,想直接通過distinct是不可能實現的。


免責聲明!

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



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