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 值視為相同的值。