Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

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
NameAlice
CityNew York
NameBob
CityLos Angeles
NameCharlie
CityNew York
NameDavid
CityChicago
NameAlice
CityNew York
NameEve
CityLos Angeles

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

SELECT DISTINCT City FROM Customers;

結果:

City
New York
Los Angeles
Chicago

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


DISTINCT 與多個欄位

選取多個欄位的唯一組合

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

SELECT DISTINCT Name, City FROM Customers;

結果:

NameCity
AliceNew York
BobLos Angeles
CharlieNew York
DavidChicago
EveLos Angeles
CityNew York
CityLos Angeles
CityNew York
CityChicago
CityLos 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 DISTINCT column FROM table;
是否可以與聚合函數結合可以(如 COUNT(DISTINCT column))
主要用途分組後進行計算
典型語法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
COUNT(*)2
COUNT(*)2
COUNT(*)1

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


結語

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

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

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 什麼是 DISTINCT?
  • DISTINCT 的基本語法
  • DISTINCT 的基本使用範例
  • 選取單一欄位的唯一值
  • DISTINCT 與多個欄位
  • 選取多個欄位的唯一組合
  • DISTINCT 與函數的結合
  • 計算不同的城市數量
  • DISTINCT 的常見問題
  • DISTINCT 只能用於 SELECT 語句
  • DISTINCT 會影響效能
  • DISTINCT 與 ORDER BY 的影響
  • DISTINCT 與 GROUP BY 的比較
  • 結語