- •1 Основные понятия и определения
- •1.1Информационные системы и банки данных
- •1.2Назначение и основные компоненты банка данных
- •1.3Трех уровневая архитектура абстракций базы данных.
- •1.4Физическая и логическая независимость данных
- •1.5Администратор базы данных
- •1.6Системы управления базами данных
- •1.7Схема обмена данными при работе с базой данных
- •1.8Локальные информационные системы
- •1.9Информационные системы в сетях
- •2Модели данных концептуального уровня
- •2.1Иерархическая модель данных
- •2.2Сетевая модель
- •2.3Реляционная модель
- •2.4Постреляционная модель
- •2.5Многомерная модель
- •2.6Объектно-ориентированная модель
- •3Физические модели баз данных
- •3.1Файловые структуры, используемые в базах данных
- •3.2 Хешированные файлы
- •3.2.1Стратегия разрешения коллизий с областью переполнения
- •3.2.2Организация стратегии свободного замещения
- •3.3Индексные файлы
- •3.3.1Файлы с плотным индексом, или индексно-прямые файлы
- •3.3.2Файлы с неплотным индексом, или индексно-последовательные файлы
- •3.3.3Организация индексов в виде b-tree (в-деревьев)
- •3.4Моделирование отношений «один-ко-многим» на файловых структурах
- •3.5Инвертированные списки
- •3.6Модели бесфайловой организации данных
- •4Реляционная модель данных
- •4.1Основные определения
- •4.2Соглашения об отношениях в реляционных системах
- •4.3Классы отношений
- •4.3.1Классы отношений с точки зрения способов создания и хранения
- •4.3.2Классификация отношений с точки зрения их содержания
- •4.4Операции реляционной алгебры
- •4.4.1Основные понятия
- •4.4.2Базовые теоретико-множественные операции
- •4.4.3Специальные операции реляционной алгебры
- •4.4.4Связи между отношениями (таблицами)
- •4.5Реляционное исчисление
- •4.6Язык запросов по образцу qbe
- •4.7Структурированный язык запросов sql
- •4.7.1История развития sql
- •4.7.2Общая характеристика языка
- •4.7.3Структура sql
- •4.7.4Оператор выбора select
- •4.7.5Применение агрегатных функций и группировки
- •4.7.6Раздел order by и ключевое слово top
- •4.7.7Вложенные запросы
- •4.7.8Внутренние и внешние объединения
- •4.7.9Перекрестные запросы
- •4.7.10Операторы манипулирования данными
- •4.7.11Запросы на создание таблиц
- •4.7.12Использование языка определения данных
- •4.8Правила Кодда (требования к реляционным бд)
- •5Проектирование баз данных
- •5.1Этапы проектирования бд
- •5.2Проблемы проектирования реляционных баз данных
- •5.3Нормализация отношений
- •5.4Метод сущность-связь
- •5.5Средства автоматизации проектирования
- •5.5.1Основные определения
- •5.5.2Модели жизненного цикла
- •5.5.3Модели структурного проектирования
- •5.5.4Объектно-ориентированные модели
- •5.5.5 Классификация case-средств
- •6Защита информации в базах данных
- •6.1Общие подходы к обеспечению безопасности данных
- •6.2Назначение и проверка полномочий, проверка подлинности
- •6.3Средства защиты базы данных
- •7Базы данных в сетях
- •7.1Организация базы данных в локальной сети
- •7.2Модели архитектуры клиент-сервер
- •7.3Управление распределенными данными
- •8История развития баз данных
4.7.9Перекрестные запросы
Перекрестный запрос – способ группировки данных по двум измерениям, позволяющий отображать итоги в компактном результирующем наборе. В перекрестном запросе группировка выполняется по одному полю, а итоговая функция применяется к другому полю. Структура перекрестного запроса следующая.
В конструкции TRANSFORM указывается поле и групповая функция, применяемая к нему. Данное поле выводится на пересечении строк и столбцов.
В конструкции GROUP BY указывается поле, по которому проводится группировка и которое выводится в качестве заголовков строк.
В конструкции PIVOT указывается поле, значения которого выводятся в качестве заголовков столбцов.
Пример1. Вычислить средние оценки по каждой дисциплине в каждой группе.
TRANSFORM Avg(R1.Оценка) AS [Avg-Оценка]
SELECT R3.Дисциплина
FROM (R2 INNER JOIN R1 ON R2.ФИО = R1.ФИО)
INNER JOIN R3 ON R2.Группа = R3.Группа
GROUP BY R3.Дисциплина
PIVOT R2.Группа;
Результат:
Дисциплина |
АИ41 |
АИ42 |
БД |
4,20 |
|
Моделирование |
4,20 |
|
Сети ЭВМ |
|
4,67 |
Пример 2. Дана таблица Продажа_бензина (Чек, Марка, Дата_продажи, Оператор, Количество). Определить суммарную продажу каждой марки бензина за каждый день. Марки бензина вывести в столбцах, даты – в строках, суммарную продажу – на пересечении строк и столбцов.
TRANSFORM SUM(Количество) AS SUM_Количество
SELECT Дата_продажи
FROM Продажа_бензина
GROUP BY Дата_продажи
PIVOT Марка;
Пример 3. Даны таблицы Продажа_бензина (Чек, Марка, Дата_продажи, Номер_сотрудника, Количество, Цена) и Сотрудники (Номер_сотрудника, Фамилия, Имя, Отчество, Должность, Оклад). Определить суммарную стоимостную продажу бензина каждым сотрудником за каждый день. В строках вывести даты, в столбцах – фамилии, на пересечении строки и столбца – суммарную стоимостную продажу.
TRANSFORM SUM(Количество * Цена) AS SUM_Стоим
SELECT Дата_продажи
FROM Продажа_бензина INNER JOIN Сотрудники
ON Продажа_бензина.[Номер_сотрудника] = Сотрудники.[Номер сотрудника]
GROUP BY Дата_продажи
PIVOT Фамилия;
4.7.10Операторы манипулирования данными
Манипулирование данными осуществляется с помощью трех операций: операция удаления записей – ей соответствует оператор DELETE, операция добавления или ввода новых записей – ей соответствует оператор INSERT и операция изменения (обновления записей) – ей соответствует оператор UPDATE.
Все операторы манипулирования данными позволяют изменить данные только в одной таблице.
Оператор ввода данных INSERT имеет следующий синтаксис:
INSERT INTO имя_таблицы [(<список столбцов>)] VALUES (<список значений>)
Пример 1. Ввод одной записи в таблицу R1.
INSERT INTO R1(ФИО, Дисциплина, Оценка)
VALUES («Попова», «БД», 3);
Пример 2. При вводе полной строки можно не задавать список столбцов.
INSERT INTO R1
VALUES («Попова», «Моделирование», 3);
Пример 3. Можно ввести неполный перечень значений, в этом случае список вводимых столбцов задают обязательно, например:
INSERT INTO R1(ФИО, Дисциплина)
VALUES («Бурковский», «Сети ЭВМ»);
В этом примере столбцу Оценка будет присвоено значение NULL.
Оператор ввода данных позволяет ввести сразу множество строк, если они выбираются из другой таблицы.
Пример 4. Добавить из таблицы ПОСТАВКА в таблицу АРХИВ_ПОСТАВОК записи за 10 февраля 2006 года:
INSERT INTO АРХИВ_ПОСТАВОК
([Индекс_товара],[Код_поставщика],[Дата_поступления], [Закупочная_цена], [Количество])
SELECT ПОСТАВКА.[Индекс_товара], ПОСТАВКА.[Код_поставщика], ПОСТАВКА.[Дата_поступления],
ПОСТАВКА.[Закупочная_цена], ПОСТАВКА.Количество
FROM ПОСТАВКА
WHERE ПОСТАВКА.[Дата_поступления] = #10/02/06#;
Оператор удаления данных DELETE позволяет удалить одну или несколько строк из таблицы в соответствии с условиями, которые задаются для удаляемых строк. Синтаксис оператора DELETE следующий:
DELETE FROM <имя_таблицы>
[WHERE <условия_отбора>]
Если условия отбора не задаются, то из таблицы удаляются все строки, однако это не означает, что удаляется вся таблица. Исходная таблица остается, но она остается пустой, незаполненной.
Например, удалить из таблицы R1 данные о сдаче экзамена студентом Антоновым по дисциплине «БД»:
DELETE *
FROM R1
WHERE ФИО = «Антонов» AND Дисциплина = «БД»;
Все операции манипулирования данными связаны с понятием целостности данных. Операции манипулирования данными не всегда выполнимы, даже если синтаксически они написаны правильно, если эти операции нарушают целостность данных.
Операция обновления данных UPDATE требуется тогда, когда происходят изменения данных, которые надо отразить в базе данных.
Запрос на обновление может изменить сразу целую группу записей. Этот запрос состоит из трех частей:
Предложение UPDATE, которое указывает на обновляемую таблицу;
Предложение SET, задающее данные для обновления;
Необязательный критерий WHERE, ограничивающий число записей, на которые воздействует запрос на обновление.
Примеры.
Изменить на 3 оценку по дисциплине «БД» у студента Миронова:
UPDATE R1 SET R1.Оценка = 3
WHERE R1.ФИО = «Миронов» AND R1.Дисциплина = «БД»;
Назначить всем стипендию в 400 рублей:
UPDATE R5 SET R5.Стипендия = 400;
Назначить повышенную стипендию тем, кто имеет две пятерки:
UPDATE R5 SET R5.Стипендия = [R5].[Стипендия]*1.5
WHERE R5.ФИО IN (SELECT R1.ФИО FROM R1 WHERE R1.Оценка =5 GROUP BY R1.ФИО HAVING COUNT(*) =2);
Назначить обычную стипендию тем, кто не имеет троек и сдавал все экзамены:
UPDATE R5 SET R5.Стипендия = [R5].[Стипендия]
WHERE R5.ФИО IN (SELECT R1.ФИО FROM R1 WHERE R1.Оценка >=4 AND R1.ФИО NOT IN ( SELECT A.ФИО FROM R1 AS A WHERE A.Оценка <= 3 OR A.Оценка IS NULL));
Снять стипендию с тех, кто получил двойку или не сдавал экзамен:
UPDATE R5 SET R5.Стипендия = 0
WHERE R5.ФИО IN (SELECT R1.ФИО FROM R1 WHERE R1.Оценка <= 2 OR R1.Оценка IS NULL);
Результат выполнения последних четырех запросов:
ФИО |
Группа |
Стипендия |
Иванова |
АИ42 |
400 |
Миронов |
АИ41 |
0 |
Петров |
АИ41 |
600 |
Сидоров |
АИ41 |
400 |
Трофимов |
АИ42 |
400 |
Уткина |
АИ42 |
400 |
В таблице Сотрудники обновить поле Оклад. Данное поле увеличить на процент, который запрашивается.
UPDATE Сотрудники
SET Оклад = Оклад * (100 + [Введите процент])/100;
В таблице Сотрудники обновить поле Оклад у сотрудника, табельный номер которого запрашивается. Поле Оклад увеличивается на процент, который запрашивается.
UPDATE Сотрудники
SET Оклад = Оклад * (100 + [Введите процент])/100
WHERE [Табельный номер] = [Введите табельный номер];
Даны две таблицы Бензин (Марка, Цена, Общее количество), Продажа (Чек, Марка, Цена продажи, Дата, Продано). Обновить поле Цена продажи в таблице Продажа, присвоить ему значение из поля Цена таблицы Бензин для соответствующих марок бензина.
UPDATE Продажа INNER JOIN Бензин
ON Бензин.Марка = Продажа.Марка
SET Продажа.[Цена продажи] = Бензин.Цена;
