Основы SELECT DISTINCT
Возвращайте только уникальные строки
«Основы SELECT DISTINCT» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Почему возникают дубликаты
В таблицах часто встречаются повторяющиеся значения. В таблице customers один и тот же city может встречаться в тысячах строк. Если Вас интересует только множество уникальных значений, обычный SELECT возвращает все строки, включая повторы.
SELECT DISTINCT объединяет одинаковые строки в одну. В этом уроке Вы изучите основы получения только уникальных результатов.
SELECT city FROM customers;
-- Returns one row per customer, with many repeated citiesКлючевое слово DISTINCT
DISTINCT записывается сразу после SELECT. Оно удаляет дубликаты строк из результирующего набора, оставляя только одну копию каждой уникальной комбинации выбранных столбцов.
SELECT DISTINCT city
FROM customers;
-- One row per unique cityDISTINCT применяется ко всей строке
Распространённое заблуждение состоит в том, что DISTINCT применяется к одному столбцу. На самом деле оно применяется ко всей выбранной строке. Каждый указанный Вами столбец участвует в определении того, являются ли две строки дубликатами.
Ниже строки устраняются по значению city, потому что выбран только этот столбец.
SELECT DISTINCT country
FROM customers;
-- Unique countries across all customersПример данных
Представьте небольшую таблицу orders. Обратите внимание на повторяющиеся значения status и country. Мы будем использовать такую структуру на протяжении всего урока.
id=1, status='paid', country='US'id=2, status='paid', country='US'id=3, status='shipped', country='DE'id=4, status='paid', country='DE'
CREATE TABLE orders (
id int PRIMARY KEY,
status text,
country text,
amount numeric(10,2)
);Уникальные значения в одном столбце
Выборка DISTINCT status из примера данных возвращает уникальные значения статуса: paid и shipped. Четыре строки объединяются в две.
SELECT DISTINCT status
FROM orders;
-- paid
-- shippedNULL считается одним значением
Хотя NULL обычно не равен ничему, даже самому себе, DISTINCT объединяет все значения NULL в одну группу. Если в столбце много строк со значением NULL, в уникальном результате Вы получите ровно одно значение NULL.
SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL rowDISTINCT с ORDER BY
Обычно уникальные значения нужно отсортировать. Сначала DISTINCT формирует уникальное множество, затем ORDER BY сортирует его. При использовании DISTINCT любой столбец из ORDER BY также должен присутствовать в списке SELECT.
SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- USDISTINCT и GROUP BY
SELECT DISTINCT col и SELECT col GROUP BY col возвращают одинаковые уникальные строки. Используйте DISTINCT, когда нужны только уникальные значения, а к GROUP BY обращайтесь, когда дополнительно нужны агрегаты, например COUNT для каждой группы.
-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;
SELECT country FROM orders
GROUP BY country;DISTINCT требует ресурсов
Удаление дубликатов не бывает бесплатным. Чтобы найти уникальные строки, база данных должна отсортировать или хешировать все строки-кандидаты. Для больших таблиц это увеличивает нагрузку на CPU и память, поэтому запрашивайте DISTINCT только тогда, когда уникальность действительно нужна.
-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders; -- id is already uniqueDISTINCT в выражениях
Вы можете применить DISTINCT к вычисляемому выражению, а не только к исходному столбцу. База данных вычисляет выражение для каждой строки, а затем удаляет дубликаты результатов.
SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- USСоздание списка вариантов
Практическое применение DISTINCT — заполнение раскрывающегося списка или списка фильтра в приложении: получите уникальные статусы, чтобы показать пользователю все доступные варианты, которые сейчас есть в данных.
SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shippedБыстрая проверка
Где должно находиться ключевое слово DISTINCT и что именно оно устраняет?
Итоги
Вы изучили основы SELECT DISTINCT:
- Оно удаляет дубликаты строк из результирующего набора.
- Оно применяется ко всей выбранной строке, а не к одному столбцу.
- Все значения
NULLобъединяются в одно значение. ORDER BYвыполняется после удаления дубликатов; его столбцы должны быть выбраны.- Оно требует дополнительных ресурсов, поэтому используйте его только при необходимости.
Далее: применение DISTINCT к нескольким столбцам.
SELECT DISTINCT status
FROM orders
ORDER BY status;Часто задаваемые вопросы
Урок «Основы SELECT DISTINCT» бесплатный?
Да — полный текст урока «Основы SELECT DISTINCT» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «Основы SELECT DISTINCT»?
Возвращайте только уникальные строки Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Основы SELECT DISTINCT»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы SELECT DISTINCT
- DISTINCT для нескольких столбцов
- PostgreSQL DISTINCT ON
- Подсчёт уникальных значений