在本教程中,您將學(xué)習(xí)如何從結(jié)果集中刪除重復(fù)的值。
從數(shù)據(jù)庫(kù)表中獲取數(shù)據(jù)時(shí),結(jié)果集可能包含重復(fù)的行或值。 如果要?jiǎng)h除這些重復(fù)的值,可以在SELECT關(guān)鍵字之后直接指定關(guān)鍵字DISTINCT,如下所示:
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)題。
以下語(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值視為相同的值。