在 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 查詢中靈活應用!🚀