DISTINCT в SQL
В этой статье вы научитесь удалять дублирущие строки в результате запроса в SQL.
При получении данных из таблицы БД набор результатов может содержать дублирующиеся строки или значения. Если вы хотите удалить эти дубликаты, можно указать ключевое слово DISTINCT
сразу после ключевого слова SELECT
.
Синтаксис
Ключевое слово DISTINCT позволяет удалять дублирующие строки из результата запроса. Вот, как оно используется:
SELECT DISTINCT список_столбцов FROM имя_таблицы;
Примечание.
DISTINCT
ведет себя так же, как ограничениеUNIQUE
. Отличие — в обработке нулевых значений. Два значенияNULL
считаются уникальными (то естьUNIQUE
сохраняет всеNULL
), но не считаются отличными друг от друга (то естьDISTINCT
сохранит только одно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
таблицы customers
.
SELECT city FROM customers;
После выполнения вы получите такой результат:
+-----------+ | city | +-----------+ | Berlin | | Madrid | | Paris | | Turin | | Portland | | Madrid | +-----------+
Если вы внимательно посмотрите на результат, то увидите, что Madrid появляется два раза, что не очень хорошо. Давайте устраним эту проблему с помощью DISTINCT
.
Для этого напишем такой запрос:
SELECT DISTINCT city FROM customers;
Результат:
+-----------+ | city | +-----------+ | Berlin | | Madrid | | Paris | | Turin | | Portland | +-----------+
Как вы видите, на этот раз в нашем наборе результатов нет дубликатов.
Примечание. Если вы используете
SELECT DISTINCT
для столбца, который имеет несколькоNULL
-значений, то SQL сохранит одноNULL
-значение и удалит из результата другие, потому чтоDISTINCT
рассматривает все значения NULL как одно и то же значение.