You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today.

Загрузка...

DISTINCT в sql это противоположность ALL

Думаю следует начать с того, что SQL является стандартом, например: ANSI SQL 89, ANSI SQL 92 и т.д., которого придерживаются как Microsoft  в его реализации Transact SQL или сокращённо TSQL, так и компания Oracle.

Поэтому освоив работу DISTINCT в диалекте MySQL, трудностей в других СУБД, думаю, не возникнет. 

 

Как уже было опомянуто, все эксперименты по DISTINCT будут проводиться в СУБД MySQL:

  1. SELECT DISTINCT - позволяет вывести уникальные, не повторяющиеся строки;
  2. аггрегатная_функция(DISTINCT столбец) - аггрегировать уникальные, не повторяющиеся данные в из указанного столбца.

Для экспериментов создана простая таблица с несколькими писателями и она будет приложена в виде ссылки на zip-архив в конце страницы.

1 - Рассмотрим первый вариант использования DISTINCT - это тот случай, когда он относится к клаузуле SELECT, сразу хотелось бы сказать, что DISTINCT является противоположностью ALL, например:

SELECT * FROM table   И    SELECT ALL * FROM table - выдадут совершенно одинаковый результат, т.е. запросы совершенно одинковые. ALL - параметр не обязательный, но даже если его не указывать, то он есть всегда, за исключением тех случаев, когда используется DISTINCT.

SELECT  использованием ALL:

select all *

SELECT без использования ALL:

SELECT без ALL *

Для последующих экспериментов не будет из пользоваться звёздочка в SELECT, а только два поля: name, lastname:

select name, lastname - много избыточной информации

Обратите внимание, в полученном результате довольно-таки много избыточной информации.

Теперь изменим запрос, добавив в него DISTINCT и проверим результат:

 

select distinct

Результат: DISTINCT - удалил повторяющиеся строки и оставил уникальные комбинации имён и фамилий. Т.е. DISTINCT пишется перед первой колонкой или перед звёздочкой и относится ко всей строке, его не надо писать перед каждой колонкой - это будет ошибкой и запрос не выполнится, например:

неправильное использование distinct - ERROR 1064 (42000)

Запрос завершился с ошибкой: ERROR 1064 (42000)

Вывод: DISTINCT, который относится к самому SELECT всегда пишется только один раз и всегда между клаузулой SELECT и первым полем или перед звёздочкой, но в случае звёздочки скорее всего будет бесполезен!

2-й вариант использования DISTINCT - это его использование в аггрегатных функция, для примера рассмотрим функцию COUNT:

 


SELECT 
	  COUNT(*) AS cnt_all
	, COUNT(DISTINCT name, lastname) AS cnt_unique_nl	
	, COUNT(DISTINCT name) AS cnt_unique_name	
	, COUNT(DISTINCT lastname) AS cnt_unique_lastname	
FROM writers;

использование distinct в count

COUNT(*) AS cnt_all - количество всех строк/записей в таблице

COUNT(DISTINCT name, lastname) AS cnt_unique_nl - количество уникальных комбинаций: имя фамилия. DISTINCT убирает дубли.

COUNT(DISTINCT name) AS cnt_unique_name - количество уникальных имён. DISTINCT тоже убирает дубли.

COUNT(DISTINCT lastname) AS cnt_unique_lastname - количество уникальных фамилий. DISTINCT опять убирает дубли.

Рекомендую после прочтения всё же перейти к практике и самостоятельно сделать как можно больше запросов для закрепления материала!

Скачать исходный код.

 


Предыдущая статья
как создать базу данных в mysql
Следующая статья
Удалить базу данных MySQL