SQL Server SELECT DISTINCT

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

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

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

Вот как это можно сделать:

SELECT 
  DISTINCT column_name 
FROM 
  table_name;

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

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

SELECT DISTINCT
 column_name1,
 column_name2 ,
...
FROM
 table_name;

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

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

Примеры SQL Server SELECT DISTINCT

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

1) Использование SELECT DISTINCT с одним столбцом

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

SELECT 
  city 
FROM 
  sales.customers 
ORDER BY 
  city;

SQL Server SELECT DISTINCT - дубликаты городов

Вывод показывает, что города являются дубликатами.

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

SELECT 
  DISTINCT city 
FROM 
  sales.customers 
ORDER BY 
  city;

SQL Server SELECT DISTINCT - отдельные города

Вывод показывает, что SELECT DISTINCT возвращает только отдельные города без дубликатов.

2) Использование SELECT DISTINCT с несколькими столбцами

В следующем примере оператор SELECT используется для извлечения городов и штатов всех клиентов из таблицы «Клиенты»:

SELECT 
  city, 
  state 
FROM 
  sales.customers 
ORDER BY 
  city, 
  state;

SQL Server SELECT DISTINCT — пример с несколькими столбцами до

В выводе указано, что имеются повторяющиеся города и штаты, например, Олбани, штат Нью-Йорк, Амарилло, штат Техас, и т. д.

Чтобы получить отдельные города и штаты клиентов, вы можете использовать SELECT DISTINCT со столбцами города и штата:

SELECT 
  DISTINCT city, state 
FROM 
  sales.customers

SQL Server SELECT DISTINCT — пример с несколькими столбцами

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

3) Использование SELECT DISTINCT с NULL

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

SELECT 
  DISTINCT phone 
FROM 
  sales.customers 
ORDER BY 
  phone;

SQL Server SELECT DISTINCT - пустой пример

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

DISTINCT против GROUP BY

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

SELECT 
  city, 
  state, 
  zip_code 
FROM 
  sales.customers 
GROUP BY 
  city, 
  state, 
  zip_code 
ORDER BY 
  city, 
  state, 
  zip_code

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

SQL Server SELECT DISTINCT против GROUP BY

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

SELECT 
  DISTINCT city, state, zip_code 
FROM 
  sales.customers;

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

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

Краткое содержание

  • Используйте предложение SQL Server SELECT DISTINCT для извлечения отдельных значений из одного или нескольких столбцов.
Мирослав С.

Автор статей, ИБ-специалист