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 как одно и то же значение.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©