SQL DISTINCT:去除重複值的關鍵字

更新日期: 2025 年 3 月 4 日

在 SQL 查詢時,經常會遇到數據重複的情況,特別是在從大規模資料庫中提取數據時。

如果我們只想獲取 唯一(不重複)的記錄,該怎麼辦?這時候,DISTINCT 關鍵字就能派上用場。

DISTINCT 允許我們在查詢結果中去除重複值,確保返回的數據不包含重複項。

本篇文章將詳細介紹 DISTINCT 的語法、應用場景,以及常見的問題,讓初學者能夠輕鬆掌握這個強大的 SQL 關鍵字。


什麼是 DISTINCT

DISTINCT 是 SQL 查詢中用來刪除重複記錄的關鍵字,通常與 SELECT 搭配使用。它會對指定欄位進行篩選,只返回唯一的值,確保結果集中不會出現相同的數據。

DISTINCT 的基本語法

SELECT DISTINCT column_name FROM table_name;

這條語句會從 table_name 表中提取 column_name 欄位的唯一值,並去除所有重複的數據。


DISTINCT 的基本使用範例

選取單一欄位的唯一值

假設我們有一個 Customers 表,內容如下:

CustomerIDNameCity
1AliceNew York
2BobLos Angeles
3CharlieNew York
4DavidChicago
5AliceNew York
6EveLos Angeles

如果我們想知道資料庫中有哪些不同的城市,可以使用 DISTINCT

SELECT DISTINCT City FROM Customers;

結果:

City
New York
Los Angeles
Chicago

👉 這條查詢刪除了 New YorkLos Angeles 的重複值,只顯示唯一的城市名稱。


DISTINCT 與多個欄位

選取多個欄位的唯一組合

如果我們希望查詢唯一的顧客名稱和城市組合,可以這樣做:

SELECT DISTINCT Name, City FROM Customers;

結果:

NameCity
AliceNew York
BobLos Angeles
CharlieNew York
DavidChicago
EveLos Angeles

👉 DISTINCT 會基於 Name 和 City 的組合 來判斷是否重複,而不是僅僅根據單一欄位來判斷。


DISTINCT 與函數的結合

DISTINCT 也可以與聚合函數(Aggregate Functions)一起使用,例如 COUNT()

計算不同的城市數量

如果我們想知道資料庫中有多少個不同的城市,可以這樣做:

SELECT COUNT(DISTINCT City) FROM Customers;

結果:

COUNT(DISTINCT City)
3

👉 這裡 COUNT(DISTINCT City) 只會計算唯一的城市數量,而不包括重複的城市名稱。


DISTINCT 的常見問題

DISTINCT 只能用於 SELECT 語句

DISTINCT 不能用於 INSERTUPDATEDELETE,它只能用來篩選查詢結果

DISTINCT 會影響效能

當使用 DISTINCT 時,SQL 需要對數據進行排序和篩選,因此在大型數據集上可能會影響查詢效能。要提高效能,可以:

  • 使用索引(Index):確保查詢的欄位上有索引,以加速去重操作。
  • 避免對所有欄位使用 SELECT *:只選擇必要的欄位來減少數據處理量。

DISTINCTORDER BY 的影響

如果在 DISTINCT 查詢中使用 ORDER BY,排序會在去重後執行。例如:

SELECT DISTINCT City FROM Customers ORDER BY City DESC;

結果:

City
New York
Los Angeles
Chicago

👉 這裡 ORDER BY City DESC 讓結果按城市名稱降序排列。


DISTINCTGROUP BY 的比較

DISTINCTGROUP BY 在某些情況下功能相似,但用途不同:

運算符主要用途典型語法是否可以與聚合函數結合
DISTINCT去除重複值SELECT DISTINCT column FROM table;可以(如 COUNT(DISTINCT column))
GROUP BY分組後進行計算SELECT column, COUNT(*) FROM table GROUP BY column;通常與聚合函數搭配

舉例來說:

SELECT City FROM Customers GROUP BY City;

這與 SELECT DISTINCT City FROM Customers; 的效果相同,但 GROUP BY 更適合用於統計計算,例如:

SELECT City, COUNT(*) FROM Customers GROUP BY City;

結果:

CityCOUNT(*)
New York2
Los Angeles2
Chicago1

👉 GROUP BY 除了去重外,還能計算每個城市的顧客數量,而 DISTINCT 只能去除重複值。


結語

DISTINCT 是 SQL 查詢中強大且實用的關鍵字,它能幫助我們快速去除重複數據,確保查詢結果的唯一性。無論是單一欄位還是多個欄位的組合,DISTINCT 都能有效地過濾數據,讓我們的查詢結果更簡潔、準確。

然而,使用 DISTINCT 可能會影響效能,因此在大型數據集上應謹慎使用,並考慮索引與 GROUP BY 來優化查詢效能。希望這篇文章能幫助你理解 DISTINCT,並在 SQL 查詢中靈活應用!🚀

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *