Избирательная выборка данных
Вы научитесь:
- использовать ключевое слово DISTINCT для возвращения запросом только уникальных строк;
- использовать фразу GROUP BY для создания запроса, возвращающего сводную информацию;
- использовать фразу HAVING для ограничения строк, возвращаемых запросом GROUP BY.
Оператор SELECT DISTINCT
Хотя одной из целей применения реляционной модели базы данных является устранение повторяющихся данных, большинство баз данных неизбежно будут содержать одинаковые значения в нескольких строках. Например, таблица, содержащая информацию об адресах клиентов, будет, вероятно, включать одни и те же значения страны и штата для многих строк. Это не создает повторы строк и вполне допустимо, поскольку каждое значение штата является атрибутом отдельного клиента. Аналогично, таблица на стороне многих в отношении один-ко-многим может иметь любое заданное значение внешнего ключа, повторяющееся многократно. Это не только не является неправильным, но и необходимо для реляционной целостности базы данных.
Однако это повторение может дать двусмысленные результаты после выполнения запроса. Для упомянутой таблицы клиентов Customer, содержащей, допустим, 10000 строк, из которых 90 процентов относятся к клиентам из Калифорнии, следующий запрос возвратит значение CA (штат Калифорния) 9000 раз – результат, который едва ли можно назвать полезным.
SELECT State FROM Customer
Использование ключевого слова DISTINCT в подобных ситуациях является спасением. Будучи помещенным непосредственно после SELECT, ключевое слово DISTINCT инструктирует SQL Server избегать дублирующихся строк в результирующем множестве. При этом следующий запрос возвратит каждое значение State для штата только один раз, что вам и нужно.
SELECT DISTINCT State FROM Customer
Совет. Ключевое слово DISTINCT имеет антипод ALL, который инструктирует SQL Server возвращать все строки, как уникальные, так или нет. Поскольку этот режим действует для оператора SELECT, слово ALL обычно не используется, но вы можете его включить, если при этом синтаксис запроса становится более понятным и очевидным.
Использование оператора SELECT DISTINCT
Ключевое слово DISTINCT может быть задано в операторе SQL конструктора запросов Query Designer, либо путем установки свойств запроса.
Создайте запрос SELECT DISTINCT с использованием панели диаграмм Diagram Pane
- Откройте конструктор запросов Query Designer для таблицы Oils, щелкнув правой кнопкой мыши на имени таблицы в рабочей панели Details Pane, укажите на Open Table (Открытие таблицы) и выберите Return All Rows (Показать все строки).
- Отобразите панель диаграмм Diagram Pane, щелкнув на кнопке Diagram Pane (Панель диаграмм)в панели инструментов конструктора запросов.
- Нажмите кнопку Add Table (Добавить таблицу).Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).
- Выберите PlantParts в списке таблиц и нажмите Add (Добавить). Конструктор запросов Query Designer добавит таблицу в запрос.
- Нажмите кнопку Close (Закрыть), чтобы закрыть диалоговое окно.
- Щелкните на кнопке SQL Pane (Панель SQL)в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL Pane.
- Удалите знак * после ключевого слова SELECT.
- Щелкните на кнопке SQL Pane (Панель SQL) в панели инструментов конструктора запросов. (Нажмите ОК, если конструктор запросов отобразит сообщение об ошибке в синтаксисе оператора SELECT.) Конструктор запросов Query Designer скроет панель SQL Pane.