SQL DISTINCT 子句

在本教程中,您將學(xué)習(xí)如何從結(jié)果集中刪除重復(fù)的值。

檢索不同的值

從數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù)時(shí),結(jié)果集可能包含重復(fù)的行或值。 如果要?jiǎng)h除這些重復(fù)的值,可以在SELECT關(guān)鍵字之后直接指定關(guān)鍵字DISTINCT,如下所示:

語(yǔ)法

DISTINCT子句用于從結(jié)果集中刪除重復(fù)的行:

SELECT DISTINCT column_list FROM table_name;

在這里,column_list是用逗號(hào)分隔的要獲取其值的數(shù)據(jù)庫(kù)表的列名或字段名的列表(例如name,age,country等)。

注意: DISTINCT子句的行為類似于UNIQUE約束,除了它對(duì)待null的方式不同。 兩個(gè)NULL值被認(rèn)為是唯一的,而同時(shí)又不認(rèn)為它們是彼此不同的。

讓我們看一些示例,演示其實(shí)際工作方式。

假設(shè)我們?cè)跀?shù)據(jù)庫(kù)中有一個(gè)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       |
+---------+--------------------+-----------+-------------+

現(xiàn)在執(zhí)行以下語(yǔ)句,該語(yǔ)句返回此表的city列中的所有行。

SELECT city FROM customers;

執(zhí)行后,您將獲得如下輸出:

+-----------+
| city      |
+-----------+
| Berlin    |
| Madrid    |
| Paris     |
| Turin     |
| Portland  |
| Madrid    |
+-----------+

如果仔細(xì)查看輸出,您會(huì)發(fā)現(xiàn)城市“Madrid”在我們的結(jié)果集中出現(xiàn)了兩次,這不好吧。好吧,讓我們解決這個(gè)問(wèn)題。

刪除重復(fù)數(shù)據(jù)

以下語(yǔ)句用于DISTINCT在customers表中生成所有城市的列表。

SELECT DISTINCT city FROM customers;

執(zhí)行上述命令后,您將獲得如下輸出:

+-----------+
| city      |
+-----------+
| Berlin    |
| Madrid    |
| Paris     |
| Turin     |
| Portland  |
+-----------+

正如您看到的,這次的結(jié)果集中沒(méi)有重復(fù)的值。

注意:如果將SELECT DISTINCT語(yǔ)句用于具有多個(gè)NULL值的列,則SQL保留一個(gè)NULL值,并從結(jié)果集中刪除其他值,因?yàn)镈ISTINCT將所有NULL值視為相同的值。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清