
- •Введение
- •Общая схема банка данных в системе
- •Основные понятия
- •Базы данных
- •Банк данных как система управления основные понятия
- •Банк данных как автоматизированная система
- •Субд с включающим языком
- •Информационные системы
- •Документальные аис основные понятия дескриптор
- •Фактографические аис
- •Основные понятия
- •Основные данные
- •Уровни моделей
- •Классификация моделей
- •Роль подсхемы
- •Этапы проектирования базы данных
- •Архитектура банка данных
- •Последовательность действий при чтении записи
- •Инфологическое проектирование базы данных
- •Модели данных и подъязыки данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Реляционные базы данных
- •Алгебра отношений
- •Преимущества реляционных бд
- •Отношения
- •Нормализация отношений
- •Функциональная зависимость
- •Полная функциональная зависимость.
- •Проектирование баз данных.
- •Специальные операции над отношениями
- •Операции над отношениями.
- •Централизация и децентрализация процессов обработки данных.
- •Традиционный набор операций
- •Нормализация отношений
- •Исчисление отношений
- •Вторая и третья нормальные формы.
- •26. Язык запросов sql
- •1 Основы sql
- •Многотабличные запросы на чтение (объединения)
- •Сортировка результатов запроса (предложение order by)
- •Объединение результатов нескольких запросов (union)*
- •Запрос на объединение и сортировка *
- •Многотабличные запросы на чтение (объединения)
- •Простое объединение таблиц (объединение по равенству)
- •Запросы с использованием отношения предок/потомок
- •Объединения с условием для отбора строк
- •Несколько связанных столбцов
- •Запросы на чтение к трем и более таблицам
- •Чтение всех столбцов
- •Самообъединения
- •Псевдонимы таблиц
- •Правила выполнения многотабличных запросов
- •Внешнее объединение таблиц *
- •Итоговые запросы на чтение
- •Агрегатные функции
- •Агрегатные функции в списке возвращаемых столбцов
- •Запросы с группировкой (предложение group by)
- •Несколько столбцов группировки
- •Ограничения на запросы с группировкой
- •Вложенные запросы на чтение
- •Внешние ссылки
- •Вложенные запросы и объединения
- •Связанные вложенные запросы
- •Однострочный оператор insert
- •В интерактивном режиме удобно не включать в оператор insert список столбцов, так как это уменьшает длину оператора. В случае программного
- •Многострочный оператор insert
- •Удаление существующих данных
- •Удаление всех строк
- •Оператор delete с вложенным запросом *
- •Обновление существующих данных
-
Запросы с группировкой (предложение group by)
Итоговые запросы напоминают итоговую информацию, находящуюся обычно в конце отчета. Эти запросы "сжимают" подробные данные, содержащиеся в отчете, в одну строку итоговых результатов. Но, как известно, в отчетах иногда используются также промежуточные итоги. И точно так же бывает необходимо получать промежуточные итоги результатов запроса. Эту возможность предоставляет предложение group by оператора select.
Назначение предложения group by проще всего понять на примере. Рассмотрим два следующих запроса:
Первый запрос представляет собой простой итоговый запрос, аналогичный примерам, рассмотренным ранее. Второй запрос возвращает несколько итоговых строк — по одной строке для каждой группы. На логическом уровне запрос выполняется следующим образом:
1. Заказы делятся на группы, по одной группе для каждого служащего. В каждой группе все заказы имеют одно и то же значение в столбце rep.
2. Для каждой труппы вычисляется среднее значение столбца amount по всем строкам, входящим в группу, и генерируется одна итоговая строка результатов. Эта строка содержит значение столбца rep для группы и среднюю стоимость заказа для данной группы.
Запрос, включающий в себя предложение group by, называется запросом с группировкой, поскольку он объединяет строки исходных таблиц в группы и для каждой группы строк генерирует одну строку таблицы результатов запроса. Столбцы, указанные в предложении group by, называются столбцами группировки, поскольку именно они определяют, по какому признаку строки делятся на группы. Ниже приведен ряд запросов с группировкой:
Между агрегатными функциями SQL и предложением group by существует связь. Агрегатная функция берет столбец значений и возвращает одно значение. Предложение group by указывает, что результаты запроса следует разделить на группы, применить агрегатную функцию по отдельности к каждой группе и получить для каждой группы одну строку результатов.
Несколько столбцов группировки
SQL позволяет группировать результаты запроса на основании двух или более столбцов. Например, предположим, что вам требуется сгруппировать заказы по служащим и клиентам. Эту задачу выполняет запрос, приведенный ниже:
Можно отсортировать данные таким образом, чтобы строки в таблице результатов запроса шли в нужном порядке. Во многих реализациях SQL при использовании предложения group by сортировка выполняется автоматически, однако автоматический порядок сортировки можно изменить с помощью предложения order by, как показано ниже:
С помощью одного запроса невозможно получить как детальные, так и промежуточные итоговые результаты. Чтобы получить детальные результаты с итогами по группам, необходимо с помощью программного SQL написать прикладную программу и вычислить промежуточные итоговые результаты в программе. В SQL Server это ограничение стандартного SQL устраняется с помощью дополнительного предложения compute, которое добавляется в конец оператора select. Предложение compute обеспечивает получение промежуточных и общих итогов, как показано в следующем примере:
Приведенный выше запрос генерирует обычные результаты, содержащие одну строку для каждой строки таблицы orders и отсортированные по столбцам rep и cust. Кроме того, он вычисляет сумму заказов для каждой пары клиент/служащий (промежуточный итог нижнего уровня) и вычисляет сумму заказов и среднюю стоимость заказа для каждого служащего (промежуточный итог верхнего уровня). Таким образом, результаты запроса содержат смесь нормальных строк и итоговых строк двух уровней.
Предложение compute не вписывается ни в какие стандарты. Более того, оно нарушает основные правила построения реляционных запросов, поскольку результаты оператора select, в котором используется это предложение, являются не таблицей, а странной комбинацией строк различного типа. Но тем не менее, как показывает пример, оно может быть весьма полезным.