MySQL Distinct
Выражение MySQL DISTINCT используется для выборки уникальных значений из указанных столбцов. В этой статье мы покажем, как применять DISTINCT в MySQL с помощью Workbench и командной строки.
Синтаксис запросов SELECT DISTINCT в MySQL
Базовый синтаксис запросов SELECT DISTINCT:
SELECT DISTINCT [Columns]
FROM Source
WHERE Conditions -- это не обязательно
- DISTINCT: это ключевое слово возвращает уникальные результаты;
- Columns: позволяет выбрать столбцы, из которых будет осуществляться выборка. Это может быть один или несколько столбцов;
- Source: одна или несколько таблиц, присутствующих в базе данных. Используйте ключевое слово JOIN, чтобы соединить несколько таблиц.
Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:

DISTINCT-запрос к одному столбцу
В этом примере мы отобразим уникальные записи из столбца education, используя SELECT DISTINCT MySQL. Но сначала выведем все значения из этого столбца:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT Education
FROM customerdetails;
Результат:

Теперь я использую ключевое слово DISTINCT:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education
FROM customerdetails;
Результат:

DISTINCT-запрос к нескольким столбцам
Когда мы используем запрос MySQL DISTINCT по нескольким полям, SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
ORDER BY Education, Profession;
Результат:

Несмотря на то, что мы использовали ключевое слово DISTINCT в выражении SELECT, из скриншота, приведенного выше видно, что запрос вернул дублирующие результаты внутри каждого столбца, потому что:
- Bachelors и Developer - это уникальная комбинация;
- Bachelors и Programming - это уникальная комбинация и т.д.
Пример DISTINCT-запроса в MySQL – условие WHERE
В этом MySQL DISTINCT примере мы покажем, как его использовать вместе с условием WHERE. Следующее выражение возвратит уникальные значения столбцов education и profession из таблицы customers, в которых годовой доход больше или равен 85000:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
WHERE Yearly_Income > 85000;

Несмотря на то, что существует 13 уникальных записей с комбинациями столбцов education и profession, 10 записей не соответствуют условию WHERE. Поэтому на скриншоте показано только 5 записей.
Замечание: Выражение DISTINCT в MySQL воспринимает NULL как допустимое уникальное значение. Поэтому используйте любое NOT NULL условие или функцию, чтобы избавиться от этих значений.
DISTINCT или GROUP BY в MySQL
В MySQL DISTINCT наследует поведение от GROUP BY. Если вы используете выражение GROUP BY без агрегатной функции, то оно будет выполнять роль ключевого слова DISTINCT.
Единственное отличие между ними заключается в следующем:
- GROUP BY сначала сортирует данные, а затем осуществляет группировку;
- Ключевое слово DISTINCTне выполняет сортировки.
Если вы используете ключевое слово DISTINCT вместе с выражением ORDER BY, то получите тот же результат, что и при применении GROUP BY. Следующий запрос возвращает уникальные значения столбца profession из таблицы customerdetails:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Profession
FROM customerdetails;
Результат:

Уберём ключевое слово DISTINCT и используем выражение GROUP BY:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT Profession
FROM customerdetails
GROUP BY Profession;
Как видите, запрос возвращает тот же результат, но в другом порядке:

В этом MySQL SELECT DISTINCT примере я использую выражение ORDER BY:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Profession
FROM customerdetails
ORDER BY Profession ASC;
Результат тот же, что и при использовании GROUP BY:

Пример DISTINCT-запроса в MySQL – командная строка
Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails:
-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
ORDER BY Education ASC, Profession ASC;
Результат:
