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

в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL 
SELECT.) Конструктор запросов Query Designer скроет панель SQL Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит каждое значение PlantPart много раз.


, чтобы повторно исполнить запрос.
Конструктор запросов Query Designer отобразит каждое значение лишь единожды.Создайте запрос SELECT DISTINCT с использованием панели SQL Pane
и отобразите панель SQL
.SELECT на следующий:SELECT DISTINCT PlantTypes.PlantType FROM Oils INNER JOIN PlantTypes ON Oils.PlantTypeID = PlantTypes.PlantTypeID

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит отличающиеся значения PlantType, имеющиеся в таблице Oils.
Ключевое слово инструктирует SQL Server возвращать только уникальные строки, в то время как фраза GROUP BY инструктирует SQL Server объединять строки с одинаковыми значениями в столбце или в столбцах, заданных во фразе, в одну строку.
Внимание! Каждая строка, включенная во фразу GROUP BY, должна быть включена в выход запроса.
Фраза GROUP BY чаще всего используется совместно с функцией агрегирования. Функция агрегирования выполняет вычисления над множеством значений и возвращает в результате единственное значение. Наиболее распространенными функциями агрегирования, используемой с GROUP BY, являются: функция MIN, которая возвращает наименьшее значение во множестве, функция MAX, которая возвращает наибольшее значение во множестве, и функция COUNT, возвращающая количество значений во множестве.
Фраза GROUP BY может быть задана с использованием любой из панелей конструктора запросов, но лучше всего это делать с помощью панели сетки Grid
Создайте запрос GROUP BY с использованием панели сетки Grid Pane
и отобразите панель сетки Grid 


в панели инструментов конструктора запросов. Конструктор запросов Query Designer добавит столбец Group By в сетку и установит оба значения равными Group By.

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит количество элементов OilName для каждого типа PlantType.
Создайте запрос GROUP BY с использованием панели SQL Pane
и отобразите панель SQL 

SELECT следующим:SELECT PlantParts.PlantPart, Count(Oils.OilName) AS NumberOfOils FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит количество элементов OilName для каждого типа PlantPart.
Фраза HAVING ограничивает строки, возвращаемые фразой GROUP BY, таким же образом, как фраза WHERE ограничивает строки, возвращаемые фразой SELECT. В один оператор SELECT может быть включена и фраза WHERE, и фраза HAVING – при этом фраза WHERE применяется до операции группировки, а фраза HAVING – после нее.
Синтаксис фразы HAVING идентичен синтаксису фразы WHERE, за исключением того, что фраза HAVING может включать одну из функций агрегирования, включенных в список столбцов фразы SELECT. Заметим, однако, что вы должны повторять функцию агрегирования. Например, фраза HAVING, используемая в следующем операторе, является корректной:
SELECT PlantParts.PlantPart, Count(Oils.OilName) as NumberOfOils FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart HAVING Count(Oils.OilName) > 3
Однако вы не можете использовать псевдоним для функции Count в фразе HAVING. Следовательно, приведенная ниже фраза HAVING не будет правильной:
HAVING NumberOfOils > 3
Создайте запрос с использованием ключевого слова HAVING в панели сетки Grid Pane
и отобразите панель сетки Grid 


в панели инструментов конструктора запросов, чтобы повторно исполнить запрос.
Создайте запрос с использованием фразы HAVING в панели SQL Pane
и отобразите панель SQL 

в панели инструментов конструктора запросов, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит только те элементы PlantParts, которым соответствуют менее пяти типов масел.
| Чтобы ... | Синтаксис оператора SQL |
|---|---|
Использовать запрос SELECT |
SELECT . |
Создать запрос GROUP BY |
SELECT ... FROM ... GROUP BY <группировка_по_столбцам> |
Использовать фразу HAVING, чтобы ограничить строки в запросе GROUP BY |
SELECT ... FROM ... GROUP BY <группировка_по_столбцам> HAVING <условие_выбора> |
GROUP BY для создания запроса, возвращающего сводную информацию;HAVING для ограничения строк, возвращаемых запросом GROUP BY.Хотя одной из целей применения реляционной модели базы данных является устранение повторяющихся данных, большинство баз данных неизбежно будут содержать одинаковые значения в нескольких строках. Например, таблица, содержащая информацию об адресах клиентов, будет, вероятно, включать одни и те же значения страны и штата для многих строк. Это не создает повторы строк и вполне допустимо, поскольку каждое значение штата является атрибутом отдельного клиента. Аналогично, таблица на стороне многих в отношении один-ко-многим может иметь любое заданное значение внешнего ключа, повторяющееся многократно. Это не только не является неправильным, но и необходимо для реляционной целостности базы данных.
Однако это повторение может дать двусмысленные результаты после выполнения запроса. Для упомянутой таблицы клиентов Customer, содержащей, допустим, 10000 строк, из которых 90 процентов относятся к клиентам из Калифорнии, следующий запрос возвратит значение CA (штат Калифорния) 9000 раз – результат, который едва ли можно назвать полезным.
SELECT State FROM Customer
Использование ключевого слова в подобных ситуациях является спасением. Будучи помещенным непосредственно после SELECT, ключевое слово инструктирует SQL Server избегать дублирующихся строк в результирующем множестве. При этом следующий запрос возвратит каждое значение State для штата только один раз, что вам и нужно.
SELECT DISTINCT State FROM Customer
Совет. Ключевое слово имеет антипод ALL, который инструктирует SQL Server возвращать все строки, как уникальные, так или нет. Поскольку этот режим действует для оператора SELECT, слово ALL обычно не используется, но вы можете его включить, если при этом синтаксис запроса становится более понятным и очевидным.
Ключевое слово может быть задано в операторе SQL конструктора запросов Query Designer, либо путем установки свойств запроса.
Создайте запрос SELECT DISTINCT с использованием панели диаграмм Diagram Pane
в панели инструментов конструктора запросов.
Конструктор запросов Query Designer отобразит диалоговое окно Add Table (Добавление таблицы).

в панели инструментов конструктора запросов. Конструктор запросов Query Designer отобразит панель SQL 
SELECT.) Конструктор запросов Query Designer скроет панель SQL Внимание! Когда вы открываете конструктор запросов Query Designer, базовым оператором SQL всегда является SELECT *. Выбор

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит каждое значение PlantPart много раз.


, чтобы повторно исполнить запрос.
Конструктор запросов Query Designer отобразит каждое значение лишь единожды.Создайте запрос SELECT DISTINCT с использованием панели SQL Pane
и отобразите панель SQL
.SELECT на следующий:SELECT DISTINCT PlantTypes.PlantType FROM Oils INNER JOIN PlantTypes ON Oils.PlantTypeID = PlantTypes.PlantTypeID

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит отличающиеся значения PlantType, имеющиеся в таблице Oils.
Ключевое слово инструктирует SQL Server возвращать только уникальные строки, в то время как фраза GROUP BY инструктирует SQL Server объединять строки с одинаковыми значениями в столбце или в столбцах, заданных во фразе, в одну строку.
Внимание! Каждая строка, включенная во фразу GROUP BY, должна быть включена в выход запроса.
Фраза GROUP BY чаще всего используется совместно с функцией агрегирования. Функция агрегирования выполняет вычисления над множеством значений и возвращает в результате единственное значение. Наиболее распространенными функциями агрегирования, используемой с GROUP BY, являются: функция MIN, которая возвращает наименьшее значение во множестве, функция MAX, которая возвращает наибольшее значение во множестве, и функция COUNT, возвращающая количество значений во множестве.
Фраза GROUP BY может быть задана с использованием любой из панелей конструктора запросов, но лучше всего это делать с помощью панели сетки Grid
Создайте запрос GROUP BY с использованием панели сетки Grid Pane
и отобразите панель сетки Grid 


в панели инструментов конструктора запросов. Конструктор запросов Query Designer добавит столбец Group By в сетку и установит оба значения равными Group By.

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит количество элементов OilName для каждого типа PlantType.
Создайте запрос GROUP BY с использованием панели SQL Pane
и отобразите панель SQL 

SELECT следующим:SELECT PlantParts.PlantPart, Count(Oils.OilName) AS NumberOfOils FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart

, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит количество элементов OilName для каждого типа PlantPart.
Фраза HAVING ограничивает строки, возвращаемые фразой GROUP BY, таким же образом, как фраза WHERE ограничивает строки, возвращаемые фразой SELECT. В один оператор SELECT может быть включена и фраза WHERE, и фраза HAVING – при этом фраза WHERE применяется до операции группировки, а фраза HAVING – после нее.
Синтаксис фразы HAVING идентичен синтаксису фразы WHERE, за исключением того, что фраза HAVING может включать одну из функций агрегирования, включенных в список столбцов фразы SELECT. Заметим, однако, что вы должны повторять функцию агрегирования. Например, фраза HAVING, используемая в следующем операторе, является корректной:
SELECT PlantParts.PlantPart, Count(Oils.OilName) as NumberOfOils FROM Oils INNER JOIN PlantParts ON Oils.PlantPartID = PlantParts.PlantPartID GROUP BY PlantParts.PlantPart HAVING Count(Oils.OilName) > 3
Однако вы не можете использовать псевдоним для функции Count в фразе HAVING. Следовательно, приведенная ниже фраза HAVING не будет правильной:
HAVING NumberOfOils > 3
Создайте запрос с использованием ключевого слова HAVING в панели сетки Grid Pane
и отобразите панель сетки Grid 


в панели инструментов конструктора запросов, чтобы повторно исполнить запрос.
Создайте запрос с использованием фразы HAVING в панели SQL Pane
и отобразите панель SQL 

в панели инструментов конструктора запросов, чтобы повторно исполнить запрос. Конструктор запросов Query Designer отобразит только те элементы PlantParts, которым соответствуют менее пяти типов масел.
| Чтобы ... | Синтаксис оператора SQL |
|---|---|
Использовать запрос SELECT |
SELECT . |
Создать запрос GROUP BY |
SELECT ... FROM ... GROUP BY <группировка_по_столбцам> |
Использовать фразу HAVING, чтобы ограничить строки в запросе GROUP BY |
SELECT ... FROM ... GROUP BY <группировка_по_столбцам> HAVING <условие_выбора> |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.