Исключение дубликатов, DISTINCT

В некоторых ситуациях SQL запрос на выборку может возвращать повторяющиеся строки данных.

Например, давайте выведем поле class из таблицы Student_in_class из базы данных, в которой организовано хранение информации о расписании занятий в школе.

MySQL 8.1
SELECT class FROM Student_in_class;
class
9
9
9
9
9
9
9
9
9
9
9
9
9
8
8
8
8
8
8
8
8
8
8
8
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
5
5
4
4
4
4
4
4
4
4
4
3
3
3
3
3
3
3
3
2
2
2
2
2
2
2
1
1
1
1
1
1
1

Поскольку в одном классе возможно нахождение нескольких студентов, то не удивительно, что при выводе мы можем наблюдать одинаковые значения. Чтобы при выборке избежать такого дублирования, есть оператор DISTINCT.

Синтаксис оператора

MySQL 8.1
SELECT [DISTINCT] поля_таблиц FROM наименование_таблицы;

То есть в нашем случае запрос на получение уникальных классов, в которых есть хотя бы один студент, будет выглядеть следующим образом:

MySQL 8.1
SELECT DISTINCT class FROM Student_in_class;
class
9
8
7
6
5
4
3
2
1

DISTINCT для нескольких колонок

При использовании оператора DISTINCT для двух и более колонок будут удаляться записи, которые имеют одинаковые значения по всем полям.

То есть для такой таблицы

first_namelast_name
JohnScott
WilliamDawson
RaulHartman
WilliamHartman
JohnScott
JohnHartman

запрос с оператором DISTINCT вернул бы все сочетания имён и фамилий кроме дублирующихся «John Scott».

MySQL 8.1
SELECT DISTINCT first_name, last_name FROM User;
first_namelast_name
JohnScott
WilliamDawson
RaulHartman
WilliamHartman
JohnHartman