首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL SELECT DISTINCT 完整教學:去除重複值語法與實戰範例

     編輯:SQL 基礎

SQL SELECT DISTINCT 去除重複值完整教學


SELECT DISTINCT 用於回傳唯一不重複的值。當欄位包含大量重複資料(如國家、類別、狀態碼)時,DISTINCT 可快速取得不重複清單。


基本語法

SELECT DISTINCT column_name, column_name
FROM table_name;
  • 可指定單一欄位或多欄位組合。
  • 多欄位時,以「所有指定欄位的組合」判斷唯一性。
  • DISTINCT 必須緊接 SELECT 關鍵字。

演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+

實戰範例

範例:取得不重複的 country 清單

SELECT DISTINCT country FROM Websites;

輸出結果:

結果:CN、USA 兩個唯一值(原表有 3 筆 CN、2 筆 USA)。


進階應用

1. 多欄位組合去重

SELECT DISTINCT country, alexa FROM Websites;

回傳 (CN,13)、(CN,4689)、(CN,20)、(USA,1)、(USA,3) 5 筆唯一組合。

2. 搭配 COUNT 統計唯一值數量

SELECT COUNT(DISTINCT country) FROM Websites;  -- 回傳 2

3. DISTINCT vs GROUP BY

特性DISTINCTGROUP BY
語意去重投影分組彙總
可用聚合函數否(僅投影)是
排序不保證通常按分組鍵排序
效能較輕量較重(含分組邏輯)

單純去重用 DISTINCT;需統計、彙總用 GROUP BY。


效能與索引

  • DISTINCT 內部通常透過排序或雜湊去重,大資料量會消耗 CPU/記憶體。
  • 被去重欄位若有索引,優化器可掃描索引葉節點直接去重(Index Full Scan),避免存取表資料。
  • COUNT(DISTINCT col) 在大表上較慢,MySQL 8.0+、PostgreSQL 支援近似算法(APPROX_COUNT_DISTINCT / HYPERLOGLOG)。

常見誤區

  • SELECT DISTINCT col1, col2 不是分別去重 col1、col2,而是去重 (col1, col2) 組合。
  • DISTINCT * 等同 DISTINCT 所有欄位組合,極少使用。
  • 搭配 ORDER BY 時,排序欄位必須包含在 SELECT 清單中(部分資料庫要求)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved