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
表,內容如下:
CustomerID | Name | City |
---|---|---|
1 | Alice | New York |
2 | Bob | Los Angeles |
3 | Charlie | New York |
4 | David | Chicago |
5 | Alice | New York |
6 | Eve | Los Angeles |
如果我們想知道資料庫中有哪些不同的城市,可以使用 DISTINCT
:
SELECT DISTINCT City FROM Customers;
結果:
City |
---|
New York |
Los Angeles |
Chicago |
👉 這條查詢刪除了 New York
和 Los Angeles
的重複值,只顯示唯一的城市名稱。
DISTINCT
與多個欄位
選取多個欄位的唯一組合
如果我們希望查詢唯一的顧客名稱和城市組合,可以這樣做:
SELECT DISTINCT Name, City FROM Customers;
結果:
Name | City |
---|---|
Alice | New York |
Bob | Los Angeles |
Charlie | New York |
David | Chicago |
Eve | Los 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
不能用於 INSERT
、UPDATE
或 DELETE
,它只能用來篩選查詢結果。
DISTINCT
會影響效能
當使用 DISTINCT
時,SQL 需要對數據進行排序和篩選,因此在大型數據集上可能會影響查詢效能。要提高效能,可以:
- 使用索引(Index):確保查詢的欄位上有索引,以加速去重操作。
- 避免對所有欄位使用
SELECT *
:只選擇必要的欄位來減少數據處理量。
DISTINCT
與 ORDER BY
的影響
如果在 DISTINCT
查詢中使用 ORDER BY
,排序會在去重後執行。例如:
SELECT DISTINCT City FROM Customers ORDER BY City DESC;
結果:
City |
---|
New York |
Los Angeles |
Chicago |
👉 這裡 ORDER BY City DESC
讓結果按城市名稱降序排列。
DISTINCT
與 GROUP BY
的比較
DISTINCT
和 GROUP 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;
結果:
City | COUNT(*) |
---|---|
New York | 2 |
Los Angeles | 2 |
Chicago | 1 |
👉 GROUP BY
除了去重外,還能計算每個城市的顧客數量,而 DISTINCT
只能去除重複值。
結語
DISTINCT
是 SQL 查詢中強大且實用的關鍵字,它能幫助我們快速去除重複數據,確保查詢結果的唯一性。無論是單一欄位還是多個欄位的組合,DISTINCT
都能有效地過濾數據,讓我們的查詢結果更簡潔、準確。
然而,使用 DISTINCT
可能會影響效能,因此在大型數據集上應謹慎使用,並考慮索引與 GROUP BY
來優化查詢效能。希望這篇文章能幫助你理解 DISTINCT
,並在 SQL 查詢中靈活應用!🚀