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_id | supplier_name | city | state |
---|---|---|---|
100 | Yandex | Moscow | Russia |
200 | Lansing | Michigan | |
300 | Oracle | Redwood City | California |
400 | Bing | Redmond | Washington |
500 | Yahoo | Sunnyvale | Washington |
600 | DuckDuckGo | Paoli | Pennsylvania |
700 | Qwant | Paris | Ile de France |
800 | Menlo Park | California | |
900 | Electronic Arts | San Francisco | California |
Давайте найдем все уникальные значения в таблице 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 записей. Вот результаты, которые вы получите:
city | state |
---|---|
Moscow | Russian |
Lansing | Michigan |
Redwood City | California |
Redmond | Washington |
Sunnyvale | Washington |
Paoli | Pennsylvania |
Paris | France |
Menlo Park | California |
В этом примере будет возвращаться каждая уникальная комбинация city и state. В этом случае DISTINCT применяется к каждому полю, указанному после ключевого слова DISTINCT. Как видите, ‘Redwood City’, ‘California’ в наборе результатов отображается только один раз, а не дважды.
Пример — как DISTINCT обрабатывает значения NULL
Наконец, считает ли оператор DISTINCT NULL уникальным значением в SQL? Ответ — да. Давайте рассмотрим это дальше.
В этом примере у нас есть таблица products со следующими данными:
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
Теперь давайте выберем уникальные значения из поля 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 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем все уникальные значения зарплат
из таблицы 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 возраст |
---|---|
3 | 5 |
Пример
Давайте просуммируем все уникальные значения зарплат
из таблицы 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 следует отказаться в одном из двух случаев:
- Вы выполняете выборку из таблиц и уверены в уникальности значений в каждой. В таком случае применение аргумента нецелесообразно, ведь это дополнительная нагрузка на сервер или клиента (в зависимости от вида СУБД).
- Вы боитесь потерять нужные данные. Поясним.
Допустим, начальник просит вас вывести список обоев, которые у вас есть, с указанием всего двух столбцов – тип и цвет. По привычке вы указываете аргумент 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, если не сказано иное:
id | name | age | salary |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте выберем все уникальные значения зарплат из таблицы 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 | Маунтин-Вью | Калифорния | |
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.
.