English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В данном руководстве вы узнаете, как удалить повторяющиеся значения из набора результатов.
从数据库表中获取数据时,结果集可能包含重复的行或值。 如果要删除这些重复的值,可以在SELECT关键字之后直接指定关键字DISTINCT,如下所示:
DISTINCT子句用于从结果集中删除重复的行:
SELECT DISTINCT column_list FROM table_name;
在这里,column_list是用逗号分隔的要获取其值的数据库表的列名或字段名的列表(例如name,age,country等)。
Внимание: DISTINCT子句的行为类似于UNIQUE约束,除了它对待null的方式不同。 两个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;
После выполнения вы получите следующий результат:
+-----------+ | город | +-----------+ | Berlin | | Madrid | | Paris | | Turin | | Portland | | Madrid | +-----------+
Если внимательно посмотреть на результат, вы обнаружите, что город “Madrid” появляется дважды в наших результатах, это не очень хорошо. Хорошо, давайте решим эту проблему.
Следующие строки используются для DISTINCT вcustomersВ таблице создается список всех городов.
SELECT DISTINCT city FROM customers;
После выполнения вышеуказанных команд вы получите следующий вывод:
+-----------+ | город | +-----------+ | Berlin | | Madrid | | Paris | | Turin | | Portland | +-----------+
Как вы видите, в этом наборе результатов нет повторяющихся значений.
Внимание:Если использовать оператор SELECT DISTINCT в столбце с несколькими NULL-значениями, SQL сохраняет один NULL-значение и удаляет другие значения из результирующего набора, так как DISTINCT рассматривает все NULL-значения как одинаковые значения.