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 на конкретном примере:

Синтаксис запросов SELECT DISTINCT в MySQL

DISTINCT-запрос к одному столбцу

В этом примере мы отобразим уникальные записи из столбца education, используя SELECT DISTINCT MySQL. Но сначала выведем все значения из этого столбца:

-- MySQL SELECT DISTINCT Example
USE company;
SELECT Education
FROM customerdetails;

Результат:

DISTINCT-запрос к одному столбцу

Теперь я использую ключевое слово DISTINCT:

-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education
FROM customerdetails;

Результат:

DISTINCT-запрос к одному столбцу - 2

DISTINCT-запрос к нескольким столбцам

Когда мы используем запрос MySQL DISTINCT по нескольким полям, SELECT вернёт комбинацию нескольких столбцов вместо уникальных отдельных записей. В этом примере мы выберем уникальные записи из столбцов education и profession:

-- MySQL SELECT DISTINCT Example
USE company;
SELECT DISTINCT Education, Profession
FROM customerdetails
ORDER BY Education, Profession;

Результат:

DISTINCT-запрос к нескольким столбцам

Несмотря на то, что мы использовали ключевое слово 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;
Пример DISTINCT-запроса в MySQL – условие WHERE

Несмотря на то, что существует 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

Уберём ключевое слово DISTINCT и используем выражение GROUP BY:

-- MySQL SELECT DISTINCT Example
USE company;
SELECT Profession
FROM customerdetails
GROUP BY Profession;

Как видите, запрос возвращает тот же результат, но в другом порядке:

DISTINCT или GROUP BY в MySQL - 2

В этом 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;

Результат:

Пример DISTINCT-запроса в MySQL – командная строка

Сергей Бензенкоавтор-переводчик статьи «MySQL Distinct»