В этом руководстве вы узнаете, как использовать предложение 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;
Вывод показывает, что города являются дубликатами.
Чтобы получить только отдельные города, можно использовать ключевое слово SELECT DISTINCT следующим образом:
SELECT DISTINCT city FROM sales.customers ORDER BY city;
Вывод показывает, что SELECT DISTINCT возвращает только отдельные города без дубликатов.
2) Использование SELECT DISTINCT с несколькими столбцами
В следующем примере оператор SELECT используется для извлечения городов и штатов всех клиентов из таблицы «Клиенты»:
SELECT city, state FROM sales.customers ORDER BY city, state;
В выводе указано, что имеются повторяющиеся города и штаты, например, Олбани, штат Нью-Йорк, Амарилло, штат Техас, и т. д.
Чтобы получить отдельные города и штаты клиентов, вы можете использовать SELECT DISTINCT со столбцами города и штата:
SELECT DISTINCT city, state FROM sales.customers
В этом примере оператор использует комбинацию значений в столбцах города и штата для оценки дубликата.
3) Использование SELECT DISTINCT с NULL
Следующее выражение находит отдельные номера телефонов клиентов:
SELECT DISTINCT phone FROM sales.customers ORDER BY phone;
В этом примере предложение 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
На следующем рисунке показан частичный вывод:
Это эквивалентно следующему запросу, использующему оператор DISTINCT:
SELECT DISTINCT city, state, zip_code FROM sales.customers;
Оба предложения: DISTINCT и GROUP BY — сокращают количество возвращаемых строк в результирующем наборе за счет удаления дубликатов.
Однако следует использовать предложение GROUP BY, если вы хотите применить агрегатную функцию к одному или нескольким столбцам.
Краткое содержание
- Используйте предложение SQL Server SELECT DISTINCT для извлечения отдельных значений из одного или нескольких столбцов.