- •Оано впо «волжский университет им. В.Н. Татищева»
- •Содержание
- •Используемые сокращения
- •1 Основные понятия системы баз данных
- •2 История развития систем управления базами данных
- •3 Модели данных
- •3.1 Иерархическая модель
- •3.2 Сетевая модель
- •3.3 Реляционная модель
- •3.3.1 Терминология и базовые понятия реляционных бд
- •3.3.2 Целостность и сохранность баз данных
- •4 Архитектура субд
- •4.1 Типовая организация современной субд
- •4.2 Основные функции субд.
- •5 Язык sql
- •5.1 Оператор select
- •5.1.1 Особенности использования предложения select
- •5.1.2 Особенности использования предложения where
- •5.1.3 Сортировка результатов запроса
- •5.1.4 Группировка записей
- •5.1.5 Ограничение на группировку записей
- •5.2 Объединение однотипных запросов
- •5.3 Структурированные, или вложенные, запросы
- •5.4 Запросы на удаление
- •5.5 Запросы на обновление данных
- •5.6 Запросы на добавление данных
- •6.2 Теоретико-множественные отношения
- •6.3 Соединения
- •6.4 Деление
- •7 Проектирование реляционной базы данных
- •7.1 Существующие подходы к проектированию баз данных
- •7.2 Этапы проектирования баз данных
- •7.2.1 Формирование и анализ требований к системе
- •7.2.1.1 Функциональное моделирование
- •7.2.1.2 Состав функциональной модели
- •7.2.1.3 Типы связей между функциями
- •7.2.1.4 Декомпозиция отношений
- •7.2.2 Проектирование с использованием метода «сущность-связь»
- •7.2.3 Переход от er–модели к реляционной
- •7.3 Проектирование реляционных баз данных с использованием нормализации
- •7.3.1 Функциональные зависимости
- •7.3.2 Пример нормализации отношений
- •Накладная № 123
- •8 Физическая организация базы данных
- •8.1 Структура данных в файлах с различной организацией
- •8.1.1 Основные понятия
- •8.1.2 Неупорядоченные и упорядоченные файлы
- •8.1.3 Хешированные файлы
- •8.2 Индексированные файлы
- •9 Защита баз данных
- •9.1 Потенциальные опасности
- •9.2 Основные типы угроз
- •9.3 Контрмеры – компьютерные средства контроля
- •Вопросы для самоконтроля
- •Используемая литература
5.1.4 Группировка записей
Если нужно выдать агрегированное значение (минимум, максимум, сумма и т.д.) не по всему результирующему набору данных, а по каждой из входящих в него групп записей, характеризующихся одинаковым значением какого-либо столбца, используют предложение GROUP BY.
Пример. Показать количество продаж по каждому типу товара.
SELECT Товары.ТипТовара, Sum(Заказ.Количества) AS [Общее Количество]
FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара
GROUP BY Товары.ТипТовара;
Рисунок 5 - Пример запроса с группировкой данных
5.1.5 Ограничение на группировку записей
Если необходимо в результирующем наборе данных выдать агрегацию не по всем группам, а только по тем из них, которые отвечают некоторому условию, используют предложение HAVING – наложение ограничений на группировку записей.
Предложение HAVING работает аналогично предложению WHERE, но применяется не к строкам, а к группам строк. Предложение HAVING накладывает условие на полученные группы. Если HAVING использует несколько условий, то они соединяются оператором OR или AND.
Пример. Показать количество продаж по каждому типу товара, если количество продаж не превышает 1000.
SELECT Товары.ТипТовара, Sum(Заказ.Количества) AS [Общее Количество]
FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара
GROUP BY Товары.ТипТовара
HAVING Sum(Заказ.Количества)<1000;
Рисунок 6 - Пример запроса с группировкой данных и использованием предложения HAVING
5.2 Объединение однотипных запросов
При необходимости объединения нескольких однотипных результирующих наборов данных используют оператор UNION.
Пример. Показать цену товаров и цену товаров со скидкой. Скидка на товары, цена которых > 100 р. – 3%, остальных – 5%.
SELECT Товары.КодТовара, Товары.ТипТовара, Товары.МаркаТовара, Товары.Цена, [Товары]![Цена]*0.03 AS [Цена со скидкой]
FROM Товары
WHERE Товары.Цена>100
UNION
SELECT Товары.КодТовара, Товары.ТипТовара, Товары.МаркаТовара, Товары.Цена, [Товары]![Цена]*0.05 AS [Цена со скидкой]
FROM Товары
WHERE Товары.Цена<=100;
5.3 Структурированные, или вложенные, запросы
Подзапрос, или вложенный запрос, – дополнительный метод манипуляции данными на основе нескольких таблиц. Подзапрос – оператор SELECT, вложенный в:
предложение SELECT;
предложение WHERE;
предложение HAVING;
оператор INSERT;
оператор UPDATE;
оператор DELETE.
Пример синтаксиса подзапроса, вложенного в предложение SELECT.
Select <список полей>
From<список таблиц>
Where<условия выборки строк>
(Select <список полей>
From<список таблиц>
Where<условия выборки строк>)
Пример. Найти покупателя самого большого заказа.
SELECT Заказ.НазваниеКомпании, Заказ.СтоимостьДоставки + Заказ.Количества * Товары.Цена AS [Стоимость заказа]
FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара
WHERE Заказ.СтоимостьДоставки+Заказ.Количества*Товары.Цена=
(SELECT MAX( Заказ.СтоимостьДоставки + Заказ.Количества * Товары.Цена) AS [Стоимость заказа]
FROM Товары INNER JOIN Заказ ON Товары.КодТовара = Заказ.КодТовара);
5.4 Запросы на удаление
Оператор DELETE предназначен для удаления группы записей из объекта. Удаляются все записи из объекта, удовлетворяющие условию поиска. Если опустить WHERE <условия поиска>, из объекта будут удалены все записи.
Формат оператора DELETE:
DELETE FROM <объект>
[Where<условия поиска>]
Пример. Удалить все счета за прошлый год.
DELETE *
FROM Счет
WHERE Счет.ДатаСчета Like "*.*.2005";
В запросах на удаление возможно использование подзапросов.