SQL DISTINCT 子句
在本教程中,你將學習如何從結果集中刪除重複值。
檢索不同的值
從資料庫表中獲取資料時,結果集可能包含重複的行或值。如果要刪除這些重複值,可以直接在 SELECT
關鍵字後面指定 DISTINCT
關鍵字,如下所示:
語法
DISTINCT
子句用於從結果集中刪除重複的行:
SELECT DISTINCT column_list FROM table_name ;
這裡,column_list 是一個逗號分隔的列表,列出了要獲取其值的資料庫表(例如,名稱, 年齡, 國家等) 的列或欄位名稱。
注意: 除了處理空值的方式外,該 DISTINCT
子句的行為與 UNIQUE
約束類似。兩個值 NULL
被認為是唯一的,而同時它們不被認為是彼此不同的。
讓我們看一些示例來說明它是如何工作的。
假設我們的資料庫中有一個 customers 表,其中包含以下記錄:
+---------+--------------------+-----------+-------------+
| cust_id | cust_name | city | postal_code |
+---------+--------------------+-----------+-------------+
| 1 | Maria Anders | Berlin | 12209 |
| 2 | Fran Wilson | Madrid | 28023 |
| 3 | Dominique Perrier | Paris | 75016 |
| 4 | Martin Blank | Turin | 10100 |
| 5 | Thomas Hardy | Portland | 97219 |
| 6 | Christina Aguilera | Madrid | 28001 |
+---------+--------------------+-----------+-------------+
現在執行以下語句,該語句返回此表的 city 列中的所有行。
SELECT city FROM customers;
執行後,你將獲得如下輸出:
+-----------+
| city |
+-----------+
| Berlin |
| Madrid |
| Paris |
| Turin |
| Portland |
| Madrid |
+-----------+
如果你仔細看輸出,你會發現我們的結果集中出現了兩次 Madrid
,這是不好的。好吧,讓我們解決這個問題。
刪除重複資料
以下 DISTINCT
語句用於生成 customers 表中所有城市的列表。
SELECT DISTINCT city FROM customers;
執行上面的命令後,你會得到這樣的輸出:
+-----------+
| city |
+-----------+
| Berlin |
| Madrid |
| Paris |
| Turin |
| Portland |
+-----------+
如你所見,我們的結果集中沒有重複值。
注意: 如果對具有多個 NULL
值的列使用 SELECT DISTINCT
語句,則 SQL 會保留一個 NULL
值並從結果集中刪除其他值,因為 DISTINCT
將所有 NULL
值視為相同的值。