- •Шехтман в. Е.
- •1. Базы данных и модели данных
- •1.1. Введение.
- •1.2. Файлы операционной системы
- •1.3. Пример базы данных.
- •1.4. Иерархическая модель данных
- •1.5. Сетевая модель данных
- •1.6. Инвертированные списки.
- •1.7. Реляционная модель данных
- •2. Введение в реляционную модель данных.
- •3. Реляционная алгебра
- •3.1. Теоретико-множественные операции.
- •3.2. Специальные операции ra
- •4. Нормализация данных
- •4.1. Полная декомпозиция.
- •Магазин товар ндс
- •Товар ндс
- •Магазин ндс
- •Товар ндс
- •Магазин товар ндс
- •4.2. Проблема дублирования данных.
- •1 Глобус 33-33-33
- •2 Глобус 33-33-33
- •4 Океан 77-77-77
- •4.3. Висячие записи.
- •Поставщик Тел
- •4.4. Проблемы, возникающие из-за неудачной структуры данных.
- •4.5. Пятая нормальная форма (5нф).
- •4.6. Функциональная зависимость.
- •4.7. Связь между фз и полной декомпозицией отношения.
- •4.8. Первая нормальная форма (1нф).
- •4.9. Вторая нормальная форма (2нф).
- •4.10. Третья нормальная форма (3нф).
- •4.11. Нормальная форма Бойса-Кодда (нфбк).
- •4.12. Многозначная зависимость.
- •4.13. Четвертая нормальная форма (4нф).
- •4.14. Пример нормализации.
- •4.15. Резюме. Нормальные формы.
- •5. Инфологическое моделирование.
- •5.1. Сущность и набор сущностей
- •5.2. Связи между сущностями.
- •5.3. Рекурсивная связь. Роли.
- •5.4. Множественные связи.
- •5.5. Суперсущности и производные сущности
- •5.6. Слабые наборы сущностей
- •5.7. Борьба с избыточнотью
- •5.8. Преобразование инфологической модели в физическую модель.
- •5.9. Пример инфологического моделирования.
- •6. Язык sql
- •6.1. История sql.
- •6.2. Структура sql.
- •6.3. Язык запросов
- •6.4. Простые запросы на выборку данных.
- •6.5. Агрегатные (групповые) функции.
- •6.6. Вложенные запросы
- •6.7. Внешние объединения
- •6.8. Изменение данных
- •Insert into r1 (o, fio, d) values (5, ‘Иванов’, ’бд’)
- •7. Представления.
- •8. Определение схемы базы данных и ограничений целостности
- •9. Транзакции
- •9.1. Свойства транзакций
- •9.2. Надежное хранение данных
- •9.3. Параллельное выполнение транзакций
- •9.3.1. Коллизия “пропавшие изменения” - lost update problem
- •9.3.2. Коллизия “промежуточные данные” - dirty read
- •9.3.3. Коллизия “Несогласованные данные” - unrepeatable read, inconsistent analysis
- •9.3.4. Коллизия “фантом” - phantom
- •9.4. Уровни изолированности
- •9.5. Тупики
- •10. Ограничение прав доступа в целях обеспечения безопасности
- •11. Физическая организация баз данных
- •11.1. Организация размещения данных.
- •11.2. Организация индексов
- •11.2.1. Поиск в бд.
- •11.2.2. Плотный индекс (индексно-прямые файлы).
- •11.2.3. Неплотный индекс (индексно-последовательные файлы).
- •11.2.4. Сбалансированные деревья.
- •11.2.5. Инвертированные списки.
- •12. Архитектура субд. Методы оптимизации запросов.
- •Логические преобразования запросов.
- •Преобразования запросов с изменением порядка реляционных операций.
- •13. Аналитические системы.
- •Анализ данных.
- •Хранилища данных
- •Типы ошибок
- •Способы реализации olap.
- •Требования к средствам реализации систем оперативной и аналитической обработки данных
- •Многомерная модель данных.
- •Разработка данных
- •14. Загружаемые процедуры.
- •In pr double precision)
- •If eof then leave Cl end if;
- •Insert into providers(code, name)
- •Values (nr.Codec, ‘*** новый поставщик ***’);
- •15. Модели совместного доступа к бд
- •15.1. Файл-серверная модель.
- •15.2. Модель клиент-сервер с бизнес-логикой на клиенте.
- •15.3. Модель клиент-сервер с бизнес-логикой на сервере субд (хранимые процедуры и триггеры) и частично на клиенте.
- •15.4. Модель сервера приложений (трёхзвенная архитектура, “тонкий клиент”)
- •Список литературы
6.5. Агрегатные (групповые) функции.
SQL, в отличие от реляционной алгебры, содержит операции, позволяющие найти обобщенные (групповые) характеристики целых совокупностей кортежей. Каждая такая совокупность называется группой. Для определения того, к какой группе относится конкретный кортеж, следует задать условие группировки. Иными словами, при группировке все множество кортежей разбивается на группы, в которые собираются кортежи, имеющие одинаковые значения атрибутов, указанные в условии группировки (списке группировки).
Имеются следующие агрегатные (т. е. применяемые к целой группе кортежей) функции:
COUNT – количество непустых значений поля в группе;
COUNT(*) – количество строк в группе;
SUM – сумма всех выбранных значений поля в группе;
AVG – среднеарифметическое значение всех выбранных значений поля в группе;
MIN, MAX – минимум и максимум поля в группе.
Функции используются как имена полей в SELECT, но имя поля – аргумент агрегатной функции.
1. Сколько экзаменов было успешно сдано?
SELECT COUNT(*) FROM R1 WHERE O > 2
Здесь операция группировки не применена. Это означает, что все отношение – одна группа.
2. Количество студентов, сдававших экзамен по каждой дисциплине:
SELECT R1.D, COUNT(*) FROM R1 GROUP BY R1.D
Для удаления дублей при группировке следует использовать DISTINCT.
3. Количество студентов в каждой группе:
SELECT COUNT(DISTINCT R2.FIO), R2.G
FROM R2 GROUP BY R2.G
Иногда удобно или необходимо переименовать атрибуты, входящие в выражение SELECT. Это достигается использованием выражения AS <синоним имени поля>.
4. Количество студентов в каждой группе:
SELECT COUNT(DISTINCT R2.FIO) AS KOL_VO, R2.G
FROM R2 GROUP BY R2.G
5. Количество студентов, сдавших экзамен по каждой дисциплине:
SELECT R1.D, COUNT(*) FROM R1
WHERE R1.O IS NOT NULL
GROUP BY R1.D
Значение NULL никогда не участвует в определении результата агрегатной функции, но если у поля, являющегося аргументом агрегатной функции, нет других занчений, кроме NULL, то значением агрегатной функции будет NULL.
6. Сколько разных оценок получено по каждой дисциплине?
SELECT R1.D, COUNT(DISTINCT R1.O) FROM R1
WHERE R1.O IS NOT NULL
GROUP BY R1.D
7. Для каждой группы, дисциплины – средняя оценка и количество студентов, успешно сдавших экзамен:
SELECT R2.G, R1.D, COUNT(*), AVR(O) FROM R1, R2
WHERE R1.FIO = R2.FIO AND R1.O IS NOT NULL AND R1.O > 2
GROUP BY R2.G, R1.D
Агрегатные функции не могут быть использованы в разделе WHERE, т.к. предикат WHERE применим только для одной строки, а агрегат – для группы строк. Однако можно наложить условие и на агрегат – для этого служит предикат HAVING. В разделе HAVING можно задать условие на группируемый атрибут, либо на результат группировки.
8. Группы, в которых по одной дисциплине получено более одной двойки:
SELECT R2.G FROM R1, R2 WHERE R1.FIO = R2.FIO AND R1.O = 2
GROUP BY R2.G, R1.D
HAVING COUNT(*) > 1
