Разное

Sql district: SQL SELECT DISTINCT Statement

Содержание

SQL оператор DISTINCT — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном материале вы узнаете, как использовать SQL оператор DISTINCT с синтаксисом и примерами.

Описание

SQL оператор DISTINCT используется для удаления дубликатов из результирующего набора оператора SELECT.

Синтаксис

Синтаксис для оператора DISTINCT в SQL:

SELECT DISTINCT expressions
FROM tables
[WHERE conditions];

Параметры или аргументы

expressions
Столбцы или расчеты, которые вы хотите получить.
tables
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица.
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.

Примечание

  • Если в операторе DISTINCT указано только одно выражение, запрос возвратит уникальные значения для этого выражения.
  • Если в операторе DISTINCT указано несколько выражений, запрос извлекает уникальные комбинации для перечисленных выражений.
  • В SQL оператор DISTINCT не игнорирует значения NULL. Поэтому при использовании DISTINCT в вашем операторе SQL ваш результирующий набор будет содержать значение NULL в качестве отдельного значения.

Пример — поиск уникальных значений в столбце

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

В этом примере у нас есть таблица suppliers со следующими данными:

supplier_idsupplier_namecitystate
100YandexMoscowRussia
200GoogleLansingMichigan
300OracleRedwood CityCalifornia
400BingRedmondWashington
500YahooSunnyvaleWashington
600DuckDuckGoPaoliPennsylvania
700QwantParisIle de France
800FacebookMenlo ParkCalifornia
900Electronic ArtsSan FranciscoCalifornia

Давайте найдем все уникальные значения в таблице suppliers. Введите следующий SQL оператор:

SELECT DISTINCT state
FROM suppliers
ORDER BY state;

SELECT DISTINCT state

  FROM suppliers

ORDER BY state;

Будет выбрано 6 записей. Вот результаты, которые вы должны получить:

state
Russia
Ile de France
Pennsylvania
California
Washington
Michigan

В этом примере возвращаются все уникальные значения состояния из таблицы поставщиков и удаляются все дубликаты из набора результатов. Как видите, штат Калифорния в наборе результатов отображается только один раз, а не четыре раза.

Пример — поиск уникальных значений в нескольких столбцах

Далее давайте рассмотрим, как использовать SQL DISTINCT для удаления дубликатов из более чем одного поля в операторе SELECT.

Используя ту же таблицу suppliers из предыдущего примера, введите следующий SQL оператор:

SELECT DISTINCT city, state
FROM suppliers
ORDER BY city, state;

SELECT DISTINCT city, state

  FROM suppliers

ORDER BY city, state;

Будет выбрано 8 записей. Вот результаты, которые вы получите:

citystate
MoscowRussian
LansingMichigan
Redwood CityCalifornia
RedmondWashington
SunnyvaleWashington
PaoliPennsylvania
ParisFrance
Menlo ParkCalifornia

В этом примере будет возвращаться каждая уникальная комбинация city и state. В этом случае DISTINCT применяется к каждому полю, указанному после ключевого слова DISTINCT. Как видите, ‘Redwood City’, ‘California’ в наборе результатов отображается только один раз, а не дважды.

Пример — как DISTINCT обрабатывает значения NULL

Наконец, считает ли оператор DISTINCT NULL уникальным значением в SQL? Ответ — да. Давайте рассмотрим это дальше.

В этом примере у нас есть таблица products со следующими данными:

product_idproduct_namecategory_id
1Pear50
2Banana50
3Orange50
4Apple50
5Bread75
6Sliced Ham25
7KleenexNULL

Теперь давайте выберем уникальные значения из поля category_id, которое содержит значение NULL. Введите следующий запрос SQL:

SELECT DISTINCT category_id
FROM products
ORDER BY category_id;

SELECT DISTINCT category_id

  FROM products

ORDER BY category_id;

Будет выбрано 4 записи. Вот результаты, которые вы должны получить:

В этом примере запрос вернет уникальные значения, найденные в столбце category_id. Как видно из первой строки в наборе результатов, NULL — это уникальное значение, которое возвращается оператором DISTINCT.

Как применять Distinct в MySQL?

Выражение MySQL DISTINCT используется для выборки уникальных значений из указанных столбцов. В этой статье мы покажем, как применять DISTINCT в MySQL с помощью Workbench и командной строки.

Базовый синтаксис запросов SELECT DISTINCT:

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

Мы собираемся использовать данные, приведенные ниже, чтобы объяснить применение ключевого слова DISTINCT в MySQL на конкретном примере:

В этом примере мы отобразим уникальные записи из столбца 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;

Результат:

Когда мы используем запрос 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 — это уникальная комбинация и т.д.

В этом 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 условие или функцию, чтобы избавиться от этих значений.

В 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:

Теперь я покажу, как отобразить уникальные записи с помощью SELECT DISTINCT MySQL в командной строки. В этом случае мы выбираем записи с уникальными значениями столбцов education и profession из таблицы customerdetails:

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

Результат:

Данная публикация представляет собой перевод статьи «MySQL Distinct» , подготовленной дружной командой проекта Интернет-технологии.ру

телеграм канал. Подпишись, будет полезно!

Команда DISTINCT — уникальные значения

Команда DISTINCT позволяет выбирать только уникальные значения
из базы данных (то есть отсеивает дубли: к примеру, в таблице есть две Маши —
тогда запрос выведет только первую).

Вместо DISTINCT можно использовать DISTINCTROW
в mySQL это одно и то же.

См. также команду COUNT,
которая может быть использована для подсчета уникальных значений
(в комбинации с DISTINCT).

Синтаксис

При выборке:

SELECT DISTINCT поле FROM имя_таблицы WHERE условие

При подсчете:

SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие

При суммировании:

SELECT SUM(DISTINCT поле) FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1Дима23400
2Петя25500
3Вася23500
4Коля301000
5Иван27500
6Кирилл281000

Пример

Давайте выберем все уникальные значения зарплат
из таблицы workers:

SELECT DISTINCT salary FROM workers

SQL запрос выберет следующие строки:

salary
зарплата
400
500
1000

Пример

Давайте подсчитаем все уникальные значения зарплат
из таблицы workers (их будет 3 штуки: 400, 500 и 1000):

SELECT COUNT(DISTINCT salary) as count FROM workers

SQL запрос выберет следующие строки:

count
количество
3

Пример

Давайте подсчитаем одновременно все уникальные значения зарплат
и уникальные значения возрастов и запишем их в разные поля:

SELECT
	COUNT(DISTINCT salary) as salary_count,
 	COUNT(DISTINCT age) as age_count
FROM workers

SQL запрос выберет следующие строки:

salary_count
зарплата
age_count
возраст
35

Пример

Давайте просуммируем все уникальные значения зарплат
из таблицы workers:

SELECT SUM(DISTINCT salary) as sum FROM workers

SQL запрос выберет следующие строки:

sum
суммарная зарплата
1900

SQL distinct: описание, примеры, свойства

Зачастую при использовании SQL для выборки информации из таблиц, пользователь получает избыточные данные, заключающиеся в наличии абсолютно идентичных повторяющихся строк. Для исключения этой ситуации используется аргумент SQL distinct в предложении Select. В данной статье будут рассмотрены примеры использования данного аргумента, а также ситуации, в которых от применения аргумента лучше отказаться.

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

Подготовка таблиц

Представим, что у нас в базе данных хранится информация об обоях, представленная в двух таблицах. Это таблица Oboi (обои) с полями id (уникальный идентификатор), type (тип обоев – бумажные, виниловые и др.), color (цвет), struct (структура) и price (цена). И таблица Ostatki (остатки) с полями id_oboi (ссылка на уникальный идентификатор в таблице Oboi) и count (количество рулонов на складе).

Заполним таблицы данными. В таблицу с обоями добавим 9 записей:

Oboi

id

type

color

struct

price

1

Бумажные

Мультиколор

Тисненые

56,9

2

Бумажные двухслойные

Беж

Гладкая

114,8

3

Виниловые

Оранж

Тисненые

504

4

Флизелиновые

Беж

Тисненые

1020,9

5

Бумажные двухслойные

Беж

Гладкая

150,6

6

Бумажные

Мультиколор

Гладкая

95,4

7

Виниловые

Коричневые

Гладкая

372

8

Флизелиновые

Белые

Тисненые

980,1

9

Тканевые

Розовые

Гладкая

1166,5

В таблицу с остатками – также девять записей:

Ostatki

id_oboi

count

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

Приступим к описанию порядка использования distinct в SQL.

Место distinct в предложении Select

Аргумент distinct следует помещать сразу после ключевого слова Select в запросах. Он применяется сразу ко всем столбцам, указанным в предложении Select, потому что будет исключать из итогового результата запроса абсолютно идентичные строки. Таким образом, достаточно один раз указать при написании запроса SQL «select distinct». Исключение составляет использование distinct внутри агрегатных функций, что рассмотрим чуть позднее.

Следует помнить, что большинство СУБД и не распознает ваш запрос вида:

SELECT distinct Ostatki.Count, distinct Oboi.*

FROM Oboi

INNER JOIN Ostatki ON Oboi.id = Ostatki.id_oboi

Здесь несколько раз указан рассматриваемый аргумент либо указан один раз, но перед вторым, третьим или иным выбираемым столбцом. Вы получите ошибку со ссылкой на неточности в синтаксисе.

Применение distinct в стандартных запросах

Очевидно, что при грамотном построении структуры таблиц и их заполнении, внутри одной таблицы исключены ситуации, когда встречаются абсолютно идентичные строки. Поэтому выполнение запроса «Select distinct *» с выборкой из одной таблицы практически нецелесообразно.

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

SELECT Oboi.type

FROM Oboi order by type

И получим результат:

type

Бумажные

Бумажные

Бумажные двухслойные

Бумажные двухслойные

Виниловые

Виниловые

Тканевые

Флизелиновые

Флизелиновые

Как видим, в таблице присутствуют дублирующиеся строки. Если же мы добавим в предложение Select distinct:

SELECT distinct Oboi.type

FROM Oboi order by type

то получим результат без повторов:

type

Бумажные

Бумажные двухслойные

Виниловые

Тканевые

Флизелиновые

Таким образом, если грамотно вносились данные в таблицы, то сразу по звонку или запросу покупателей мы сможем ответить, что жидких обоев, стеклообоев и акриловых обоев в наличии в магазине нет. Учитывая, что ассортимент в магазинах обычно не ограничивается одной сотней обоев, просмотреть перечень из неуникальных типов было бы довольно трудозатратно.

Применение distinct внутри агрегатных функций

Аргумент SQL distinct можно использовать с любой агрегатной функцией. Но для Min и Max его применение не даст никакого эффекта, а при вычислении суммы или среднего значения редко можно представить ситуацию, когда не нужно было бы учитывать повторы.

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

SELECT sum(Ostatki.count)

FROM Ostatki

Запрос выдаст ответ 143. Если же мы изменим на:

SELECT sum(distinct Ostatki.count)

FROM Ostatki

то получим всего 119, ведь обои под артикулами 3 и 7 находятся на складе в одинаковом количестве. Однако очевидно, что этот ответ неверен.

Чаще всего в SQL distinct применяется с функцией Count. Так, без труда мы можем узнать, сколько уникальных видов обоев у нас вообще есть:

SELECT count(distinct Oboi.type)

FROM Oboi

И получить результат 5 – бумажные обычные и двухслойные, виниловые, тканевые и флизелиновые. Наверняка все видели рекламу типа: «Только у нас более 20 видов различных обоев!», под которой подразумевается, что в данном магазине не пара десятков рулонов всего, а обои самых разнообразных современных типов.

Интересно, что в одном запросе можно указывать несколько функций Count как с атрибутом distinct, так и без него. То есть это единственная ситуация, когда distinct в Select’е может присутствовать несколько раз.

Когда следует отказаться от применения аргумента

От применения аргумента SQL distinct следует отказаться в одном из двух случаев:

  1. Вы выполняете выборку из таблиц и уверены в уникальности значений в каждой. В таком случае применение аргумента нецелесообразно, ведь это дополнительная нагрузка на сервер или клиента (в зависимости от вида СУБД).
  2. Вы боитесь потерять нужные данные. Поясним.

Допустим, начальник просит вас вывести список обоев, которые у вас есть, с указанием всего двух столбцов – тип и цвет. По привычке вы указываете аргумент distinct:

SELECT distinct Oboi.type, Oboi.color

FROM Oboi

ORDER BY Oboi.type

И – теряете часть данных:

type

color

Бумажные

Мультиколор

Бумажные двухслойные

Беж

Виниловые

Коричневые

Виниловые

Оранж

Тканевые

Розовые

Флизелиновые

Беж

Флизелиновые

Белые

Может создаться впечатление, что бумажных обоев (обычных и двухслойных) у нас всего по одному виду, хотя на самом деле даже в нашей маленькой таблице их по два артикула (результат без distinct):

type

color

Бумажные

Мультиколор

Бумажные

Мультиколор

Бумажные двухслойные

Беж

Бумажные двухслойные

Беж

Виниловые

Коричневые

Виниловые

Оранж

Тканевые

Розовые

Флизелиновые

Белые

Флизелиновые

Беж

Поэтому, как и при написании любого запроса, с аргументом distinct надо быть аккуратным и грамотно решать вопрос с ее применением в зависимости от поставленной задачи.

Альтернатива distinct

Противоположность аргументу distinct – аргумент All. При его применении повторяющиеся строки сохраняются. Но поскольку по умолчанию СУБД так и считает, что нужно выводить все значения, то аргумент All – это скорее уточнитель, чем реальный функциональный аргумент.

Надеемся, что вам теперь понятно, когда применяется distinct (SQL). Описание дало вам полную информацию о целесообразности применения этого аргумента при решении разных задач. Ведь, как оказалось, даже такой простой аргумент в своем применении скрывает вполне ощутимую вероятность потерять некоторые данные и вывести неточную информацию.

DISTINCT оператор MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

В этом учебном пособии вы узнаете, как использовать MySQL оператор DISTINCT с синтаксисом и примерами.

Описание

MySQL оператор DISTINCT используется для удаления дубликатов из набора результатов. Оператор DISTINCT может использоваться только с операторами SELECT.

Синтаксис

Синтаксис оператор DISTINCT в MySQL:

SELECT DISTINCT expressions
FROM tables
[WHERE conditions];

Параметры или аргументы

expressions — столбцы или вычисления, которые вы хотите получить.
tables — таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, перечисленная в операторе FROM.
WHERE conditions — необязательный. Условия, которые должны быть выполнены для выбранных записей.

Примечание

  • Когда в DISTINCT предусмотрено только одно expressions, запрос возвращает уникальные значения для этого expressions.
  • Если в DISTINCT представлено более одного expressions, запрос будет получать уникальные комбинации для указанных expressions.
  • В MySQL оператор DISTINCT не игнорирует значения NULL. Поэтому при использовании DISTINCT в вашем SQL-предложении ваш результирующий набор будет включать NULL в качестве отдельного значения.

Пример с одним столбцом

Рассмотрим простейший пример MySQL оператора DISTINCT. Мы можем использовать MySQL DISTINCT, чтобы вернуть один столбец, который удаляет дубликаты из набора результатов.

Например:

SELECT DISTINCT state
FROM customers;

SELECT DISTINCT state

FROM customers;

Этот пример MySQL DISTINCT возвращает все уникальные значения state из таблицы customers.

Пример с несколькими столбцами

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

SELECT DISTINCT city, state
FROM customers;

SELECT DISTINCT city, state

FROM customers;

Этот пример MySQL оператора DISTINCT возвращает каждую уникальную комбинацию полей city и state из таблицы customers. В этом случае DISTINCT применяется к каждому столбцу, указанному после ключевого слова DISTINCT, и, поэтому, возвращает отдельные комбинации.

DISTINCT оператор — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Это SQL руководство объясняет, как использовать SQL оператор DISTINCT с синтаксисом и примерами.

Описание

SQL оператор DISTINCT используется для удаления дубликатов из результирующего набора SELECT.

Синтаксис

SELECT DISTINCT expressions
FROM tables
[WHERE conditions];

Параметры или аргументы

expressions — столбцы или расчеты, которые вы хотите получить.

tables – таблицы из которых вы хотите выгрузить данные. После оператора FROM должна быть указана хотя бы одна таблица.

WHERE conditions. Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.

Примечание

  • Когда в операторе DISTINCT содержится только одно выражение, запрос будет возвращать уникальные значения для этого выражения.
  • Когда в операторе DISTINCT содержится более одного выражения, запрос будет возвращать уникальные комбинации для перечисленных выражений.
  • Оператор DISTINCT не игнорирует NULL значения. Таким образом, при использовании DISTINCT в вашем SQL запросе, ваш результирующий набор будет включать в себя NULL в качестве отдельного значения.

Пример с одним полем

Рассмотрим на примере простой SQL DISTINCT запрос. Здесь используется SQL оператор DISTINCT, который возвращает одно поле, в котором удалены дубликаты из результирующего набора.

SELECT DISTINCT city
FROM suppliers;

SELECT DISTINCT city

FROM suppliers;

Этот пример SQL оператора DISTINCT возвращает все уникальные значения city из таблицы suppliers.

Пример — с несколькими полями

Рассмотрим как можно использовать SQL оператор DISTINCT, чтобы удалить дубликаты из более чем одного поля в вашем SQL запросе SELECT.

SELECT DISTINCT city, state
FROM suppliers;

SELECT DISTINCT city, state

FROM suppliers;

В этом примере SQL запрос вернет уникальные комбинации полей city и state. В этом случае DISTINCT применяется к каждому полю, указанному после ключевого слова DISTINCT.

SQL-Урок 11. Выборка уникальных данных (SELECT DISTINCT)

Оператор SQL DISTINCT используется для указания на то, что следует работать только с уникальными значениями столбца.

Оператор SQL DISTINCT нашел широкое применение в операторе SQL SELECT, для выборки уникальных значений. Так же используется в агрегатных функциях.

Синтаксис

При выборке:

SELECT DISTINCT поле FROM имя_таблицы WHERE условие

При подсчете:

SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие

При суммировании:

SELECT SUM(DISTINCT поле) FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

idnameagesalary
1Дима23400
2Петя25500
3Вася23500
4Коля301000
5Иван27500
6Кирилл281000

Пример 

Давайте выберем все уникальные значения зарплат из таблицы workers:

SELECT DISTINCT salary FROM workers

SQL запрос выберет следующие строки:

Пример 

Давайте подсчитаем все уникальные значения зарплат из таблицы workers (их будет 3 штуки: 400, 500 и 1000):

SELECT COUNT(DISTINCT salary) as count FROM workers

SQL запрос выберет следующие строки:

Пример 

Давайте подсчитаем одновременно все уникальные значения зарплат и уникальные значения возрастов и запишем их в разные поля:

SELECT
	COUNT(DISTINCT salary) as salary_count,
 	COUNT(DISTINCT age) as age_count
FROM workers

SQL запрос выберет следующие строки:

Пример 

Давайте просуммируем все уникальные значения зарплат из таблицы workers:

SELECT SUM(DISTINCT salary) as sum FROM workers

SQL запрос выберет следующие строки:

SQL Server SELECT DISTINCT

Сводка : в этом руководстве вы узнаете, как использовать предложение SQL Server SELECT DISTINCT для получения только отдельных значений в указанном списке столбцов.

Введение в SQL Server Предложение SELECT DISTINCT

Иногда может потребоваться получить только отдельные значения в указанном столбце таблицы. Для этого вы используете предложение SELECT DISTINCT следующим образом:

 

SELECT DISTINCT имя_столбца ОТ table_name;

Запрос возвращает только отдельные значения в указанном столбце.Другими словами, он удаляет повторяющиеся значения в столбце из набора результатов.

Если вы используете несколько столбцов следующим образом:

 

SELECT DISTINCT column_name1, column_name2, ... ОТ table_name;

Запрос использует комбинацию значений во всех указанных столбцах в списке SELECT для оценки уникальности.

Если вы примените предложение DISTINCT к столбцу, имеющему NULL, предложение DISTINCT сохранит только одно значение NULL и исключит другое.Другими словами, предложение DISTINCT обрабатывает все «значения» NULL как одно и то же значение.

SQL Server SELECT DISTINCT examples

Для демонстрации мы будем использовать таблицу customers из образца базы данных.

A) DISTINCT , пример одного столбца

Следующий оператор возвращает все города всех клиентов в таблицах customers :

 

SELECT город ОТ sales.customers СОРТИРОВАТЬ ПО город;

Как ясно видно из выходных данных, города дублируются.

Чтобы выделить города, вы добавляете ключевое слово DISTINCT следующим образом:

 

SELECT DISTINCT город ОТ sales.customers СОРТИРОВАТЬ ПО город;

Теперь запрос возвращает отдельное значение для каждой группы дубликатов. Другими словами, он удалил все повторяющиеся города из набора результатов.

B) DISTINCT , пример нескольких столбцов

Этот оператор возвращает все города и штаты всех клиентов:

 

SELECT Город, государство ОТ продажи.клиенты СОРТИРОВАТЬ ПО Город, государство;

Следующее утверждение определяет город и штат всех клиентов.

 

ВЫБРАТЬ ОТЛИЧИТЕЛЬНЫЙ Город, государство ОТ sales.customers

В этом примере инструкция использовала комбинацию значений в столбцах city и state для оценки дубликата.

C) DISTINCT с примером нулевых значений

Следующий пример находит отдельные телефонные номера клиентов:

 

SELECT DISTINCT Телефон ОТ продажи.клиенты СОРТИРОВАТЬ ПО Телефон;

В этом примере предложение DISTINCT сохранило только одно значение NULL в столбце phone и удалило остальные значения NULL.

DISTINCT по сравнению с GROUP BY

Следующий оператор использует предложение GROUP BY для возврата отдельных городов вместе с штатом и почтовым индексом из таблицы sales.customers :

 

SELECT Город, государство, индекс ОТ продажи.клиенты ГРУППА ПО Город (*): Штат (*): Почтовый Индекс СОРТИРОВАТЬ ПО город, штат, почтовый_код

На следующем рисунке показан частичный вывод:

Это эквивалентно следующему запросу, в котором используется оператор DISTINCT :

 

SELECT ОТЛИЧИТЕЛЬНЫЙ Город, государство, индекс ОТ sales.customers;

Предложение DISTINCT и GROUP BY сокращает количество возвращаемых строк в наборе результатов за счет удаления дубликатов.

Однако вам следует использовать предложение GROUP BY , если вы хотите применить агрегатную функцию к одному или нескольким столбцам.

В этом руководстве вы узнали, как использовать предложение SQL Server SELECT DISTINCT для получения различных значений в указанном списке столбцов.

.

SQL: пункт DISTINCT


В этом руководстве по SQL объясняется, как использовать предложение SQL DISTINCT с синтаксисом и примерами.

Описание

Предложение SQL DISTINCT используется для удаления дубликатов из набора результатов оператора SELECT.

Синтаксис

Синтаксис предложения DISTINCT в SQL:

 ВЫБРАТЬ РАЗЛИЧНЫЕ выражения
ИЗ таблиц
[ГДЕ условия]; 

Параметры или аргументы

выражений
Столбцы или вычисления, которые вы хотите получить.
столов
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть хотя бы одна таблица.
ГДЕ условия
Необязательно. Условия, которые должны быть выполнены для выбора записей.

Примечание

  • Если в предложении DISTINCT указано только одно выражение, запрос вернет уникальные значения для этого выражения.
  • Если в предложении DISTINCT указано более одного выражения, запрос будет извлекать уникальные комбинации для перечисленных выражений.
  • В SQL предложение DISTINCT не игнорирует значения NULL. Таким образом, при использовании предложения DISTINCT в вашем операторе SQL ваш набор результатов будет включать NULL как отдельное значение.

DDL / DML для примеров

Если вы хотите следовать этому руководству, получите DDL для создания таблиц и DML для заполнения данных. Тогда попробуйте примеры в своей базе данных!

Получить DDL / DML

Пример — поиск уникальных значений в столбце

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

В этом примере у нас есть таблица с именем поставщиков со следующими данными:

ID поставщика имя_поставщика город состояние
100 Microsoft Редмонд Вашингтон
200 Google Маунтин-Вью Калифорния
300 Оракул Редвуд-Сити Калифорния
400 Кимберли-Кларк Ирвинг Техас
500 Тайсон Фудс Спрингдейл Арканзас
600 СК Джонсон Расин Висконсин
700 Dole Food Company Вестлейк Виллидж Калифорния
800 Цветы Еда Thomasville Грузия
900 Электронное искусство Редвуд-Сити Калифорния

Давайте найдем все уникальные состояния в таблице поставщиков .Введите следующий оператор SQL:

Попробуй это

 ВЫБРАТЬ ОТЛИЧНОЕ состояние
ОТ поставщиков
ЗАКАЗАТЬ ПО состоянию; 

Будет выбрано 6 записей. Вот результаты, которые вы должны увидеть:

состояние
Арканзас
Калифорния
Грузия
Техас
Вашингтон
Висконсин

В этом примере будут возвращены все уникальные значения состояния из таблицы поставщиков и удалены все дубликаты из набора результатов.Как видите, штат Калифорнии появляется в результирующем наборе только один раз, а не четыре раза.

Пример — поиск уникальных значений в нескольких столбцах

Затем давайте посмотрим, как использовать предложение SQL DISTINCT для удаления дубликатов из более чем одного поля в операторе SELECT.

Используя ту же таблицу поставщиков из предыдущего примера, введите следующий оператор SQL:

Попробуй это

 ВЫБЕРИТЕ ОТЛИЧНЫЙ город, штат
ОТ поставщиков
ЗАКАЗАТЬ ПО городу, области; 

Будет выбрано 8 записей.Вот результаты, которые вы должны увидеть:

город состояние
Ирвинг Техас
Маунтин-Вью Калифорния
Расин Висконсин
Редмонд Вашингтон
Редвуд-Сити Калифорния
Спрингдейл Арканзас
Thomasville Грузия
Вестлейк Виллидж Калифорния

В этом примере будет возвращена каждая уникальная комбинация city и state .В этом случае DISTINCT применяется к каждому полю, указанному после ключевого слова DISTINCT. Как видите, Redwood City, California появляется в результирующем наборе только один раз, а не дважды.

Пример — как предложение DISTINCT обрабатывает значения NULL

Наконец, рассматривает ли предложение DISTINCT NULL как уникальное значение в SQL? Ответ положительный. Давайте рассмотрим это дальше.

В этом примере у нас есть таблица с именем продуктов со следующими данными:

product_id название_продукта category_id
1 Груша 50
2 Банан 50
3 Оранжевый 50
4 Яблоко 50
5 Хлеб 75
6 Ветчина нарезанная 25
7 Kleenex НЕТ

Теперь давайте выберем уникальные значения из поля category_id , которое содержит значение NULL.Введите следующий оператор SQL:

Попробуй это

 ВЫБРАТЬ DISTINCT идентификатор_категории
ИЗ продуктов
ЗАКАЗАТЬ ПО category_id; 

Будет выбрано 4 записи. Вот результаты, которые вы должны увидеть:

category_id
НЕТ
25
50
75

В этом примере запрос вернет уникальные значения, найденные в столбце category_id .Как видно из первой строки в наборе результатов, NULL — это уникальное значение, возвращаемое предложением DISTINCT.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *