- •Введение в базы данных
- •Отношения между прикладными программами и субд
- •Системы обработки баз данных
- •История баз данных
- •Организационный контекст
- •Реляционная модель
- •Коммерческие субд для микрокомпьютеров
- •Клиент-серверные приложения баз данных
- •Базы данных с использованием Интернет-технологий
- •Распределенные базы данных
- •Объектно-ориентированные субд
- •Банк данных
- •Основные понятия и определения
- •Пользователи банков данных
- •База данных
- •Архитектура базы данных. Физическая и логическая независимость
- •Схемы и отображения
- •Независимость от данных
- •Система управления базами данных – субд
- •Процесс прохождения пользовательского запроса
- •Введение в разработку баз данных
- •Метаданные
- •Индексы
- •Метаданные приложений
- •Подсистема средств проектирования
- •Подсистема обработки
- •Ядро субд
- •Создание базы данных
- •Процесс разработки базы данных
- •Моделирование данных
- •Функции субд
- •Модели данных
- •Объектные или инфологические модели данных
- •Модели данных на основе записей или даталогические
- •Реляционная модель данных
- •Преподаватели
- •Сетевая модель данных
- •. Физические модели данных
- •Концептуальное моделирование
- •Реляционная модель
- •Структура реляционных данных
- •Кортежи
- •Внешний ключ
- •Альтернативная терминология
- •Математические отношения
- •Отношения в базе данных
- •Реляционные ключи
- •Реляционная целостность
- •Целостность сущностей
- •Ссылочная целостность
- •Реляционные языки
- •Реляционная алгебра
- •Учебный проект DreamHome
- •Реляционная алгебра (продолжение)
- •Выборка (или ограничение)
- •Проекция
- •Декартово произведение
- •Объединение
- •Разность
- •Операции соединения
- •Tema-соединение (θ-join)
- •Естественное соединение
- •Внешнее соединение
- •Полусоединение
- •Пересечение
- •Деление
- •Другие языки
- •Примеры применения реляционной алгебры
- •Обзор жизненного цикла информационных систем
- •Жизненный цикл приложения баз данных
- •Проектирование базы данных
- •Проектирование баз данных на основе восходящего подхода (Метод нормализации или декомпозиции)
- •Цель нормализации
- •Проблемы, вызываемые использованием единственного отношения (аномалии обновления)
- •Проблема вставки
- •Проблема обновления
- •Проблемы удаления
- •Функциональные зависимости
- •Процесс нормализации
- •Декомпозиция без потерь и функциональные зависимости
- •Первая нормальная форма (1 нф) (из Коннолли)
- •Вторая нормальная форма (2нф)
- •Третья нормальная форма (знф)
- •Нормальная форма Бойса-Кодда (нфбк)
- •4 И 5 нормальные формы (4нф и 5нф)
- •Пример нормализации
- •. Другая декомпозиция отношения консультант
- •Некоторые комментарии к декомпозиционному алгоритму проектирования
- •Некоторые модификации алгоритма проектирования Избыточные функциональные зависимости
- •Транзитивные зависимости
- •Добавление атрибутов в фз
- •Правила вывода
- •Алгоритм проектирования бд методом декомпозиции (восходящий метод)
- •Проверка отношений на завершающей фазе их проектирования
- •Задачи к текущему материалу
- •Пример аномалий для 2нф
- •Нормальная форма Бойса—Кодда (нфбк) с примером аномалий для 3 формы
- •Язык sql
- •Запрос одиночной таблицы
- •Проектирование в sql
- •Выборка в sql
- •Сортировка
- •Встроенные функции sql
- •Встроенные функции и группировка
- •Запрос нескольких таблиц
- •Вложенные запросы
- •Соединение с помощью sql
- •Сравнение вложенного запроса и соединения
- •Внешнее соединение
- •Операторы exists и not exists
- •Изменение данных
- •Insert into запись
- •Insert into запись
- •Insert into третьекурсник
- •Удаление данных
- •Модификация данных
- •Запрос на sql с exist и not exist (реализация реляционной операции Деления)
- •Операция внешнего соединения таблиц в access (Мои замечания)
- •Псевдонимы столбцов и таблиц
- •Уточнения запроса
- •Теоретико-множественные операции
- •Декартово произведение наборов записей
- •Объединение наборов записей (union)
- •Пересечение наборов записей (intersect)
- •Intersect corresponding (id_компонента, Тип_компонента)
- •Вычитание наборов записей (except)
- •Операции соединения
- •Естественное соединение (natural join)
- •Условное соединение (join... On)
- •Соединение по именам столбцов (join... Using)
- •Внешние соединения
- •Левое соединение {left outer join)
- •Правое соединение {right outer join)
- •Внешнее соединение Преподаватель-Изучение-Предмет. Создание в access. Пример
- •Операторы exists и not exists
- •Низходящее проектирование бд на основе er-модели Модель «сущность—связь» и ее варианты
- •Реализация низходящего проектирования бд на основе er-модели
- •Типы сущностей
- •Способы представления сущностей на диаграмме
- •Атрибуты
- •Типы связей
- •Представление связей на диаграммах
- •Атрибуты связей
- •. Структурные ограничения
- •Показатель кардинальности
- •Степень участия
- •Примеры er-проектирования
- •Модель «сущность—связь» в другом рассмотрении
- •Элементы модели «сущность—связь»
- •Сущности
- •Атрибуты
- •Идентификаторы
- •Три типа бинарных связей
- •Диаграммы «сущность—связь»
- •Изображение атрибутов в диаграммах «сущность—связь»
- •Слабые сущности
- •Представление многозначных атрибутов при помощи слабых сущностей
- •Подтипы сущностей
- •Пример er-диаграммы
- •Документирование делового регламента
- •Модель «сущность—связь» и case-средства
- •Диаграммы «сущность—связь» в стиле uml
- •Сущности и связи в uml
- •Представление слабых сущностей
- •Представление подтипов
- •Конструкции ооп, введенные языком uml
- •Роль uml в базах данных на сегодняшний день
- •Примеры
- •Вопросы группы I
- •Вопросы группы II
- •Литература по курсу «базы и банки данных»
Сортировка
Строки результирующего отношения могут быть отсортированы по значениям одного или нескольких столбцов с помощью оператора ORDER BY. Рассмотрим следующий пример:
SELECT Имя. Специальность, Курс
FROM СТУДЕНТ
WHERE Специальность = 'БУХГАЛТЕРСКИЙ УЧЕТ'
ORDER BY Имя
Этот запрос перечислит в алфавитном порядке студентов, специализирующихся на бухгалтерском учете. Результат имеет следующий вид:
Для сортировки можно выбрать более одного столбца. В этом случае первый из указанных столбцов будет главным полем, по которому будет производиться сортировка, следующий столбец будет следующим по старшинству полем, и т. д. Можно объявить сортировку столбцов как по возрастанию (ключевое слово ASC), так и по убыванию (ключевое слово DESC). В качестве примера рассмотрим следующий оператор:
SELECT Имя, Специальность, Курс
FROM СТУДЕНТ
WHERE Курс IN ['С1', 'С2', 'С4']
ORDER BY Специальность ASC, Курс DESC
Результатом будет таблица:
Ключевые слова ORDER BY могут комбинироваться с любыми операторами SELECT.
Встроенные функции sql
В SQL предусмотрено пять встроенных функций (built-in functions): COUNT, SUM, AVG, MAX и MIN4. Функции COUNT и SUM различны, хотя обе они выполняют подсчет. Функция COUNT вычисляет количество строк в таблице, a SUM подсчитывает количество числовых столбцов. Функции AVG, МАХ и MIN также работают с числовыми столбцами: AVG вычисляет среднее значение, а МАХ и MIN находят соответственно максимальное и минимальное значение столбца в таблице. Выражение
SELECT COUNT(*)
FROM СТУДЕНТ
подсчитывает количество строк в таблице СТУДЕНТ и отображает его в таблице, имеющей одну строку и один столбец:
Рассмотрим выражения
SELECT COUNT (Специальность)
FROM СТУДЕНТ
и
SELECT COUNT (DISTINCT Специальность)
FROM СТУДЕНТ
Первое выражение подсчитывает общее количество специальностей в таблице, включая повторения, а второе — количество различных специальностей. Результаты имеют следующий вид:
За исключением операторов с ключевым словом GROUP BY, которое рассмотрено ниже, встроенные функции в операторе SELECT не могут перемежаться с именами столбцов. Таким образом, запись вида
SELECT Имя, COUNT (*)
недопустима.
Встроенные функции можно использовать для запроса результата, как в приведенных выше примерах. В большинстве реализаций SQL и в стандарте ANSI SQL встроенные функции не могут фигурировать в предложении WHERE.
Встроенные функции и группировка
Для большей практичности встроенные функции можно применять к группам строк внутри таблицы. Такие группы формируются путем сбора (в логическом,
а не в физическом смысле) строк, имеющих одинаковое значение заданного столбца. Например, студентов можно группировать по специальностям — то есть для каждого значения атрибута Специальность будет сформирована своя группа. На рис. 9.2 можно выделить три группы студентов: одна специализируется на истории, другая — на бухгалтерском учете, а третья — на математике.
Ключевое слово GROUP BY инструктирует СУБД группировать те строки, которые имеют одинаковое значение заданного столбца. Рассмотрим выражение
SELECT Специальность, COUNT(*)
FROM СТУДЕНТ
GROUP BY Специальность
Результатом будет отношение:
Строки таблицы СТУДЕНТ логически сгруппированы по значению атрибута Специальность, а функция COUNT суммирует количество строк в каждой группе. Результат представляет собой таблицу из двух столбцов: названия специальности и количества студентов с этой специальностью. Для подгрупп в операторе SELECT могут быть указаны как столбцы, так и встроенные функции.
В некоторых случаях возникает потребность рассматривать не все группы. Например, мы сформировали группы студентов, имеющих одинаковую специальность, и теперь хотим рассматривать только те из них, количество студентов в которых больше двух. Чтобы указать нужное нам подмножество групп, мы можем воспользоваться SQL-предложением HAVING.
Следующие операторы SQL выдают перечень предметов, на которых специализируется более двух студентов, а также количество студентов, занимающихся по каждой из этих специализаций:
SELECT Специальность, COUNT (*)
FROM СТУДЕНТ
GROUP BY Специальность
HAVING COUNT (*) > 2
Здесь составляются группы из студентов, имеющих одинаковую специальность, затем выбираются те из них, в составе которых имеется более двух студентов (прочие группы игнорируются.) На выходе выдаются название специальности и число студентов в каждой из выбранных групп. Результат имеет следующий вид:
Для еще большей общности могут быть также добавлены предложения WHERE. Однако это может привести к неоднозначности. Рассмотрим выражение
SELECT Специальность, МАХ (ЛичныйНомер)
FROM СТУДЕНТ
WHERE Курс = 'С4'
GROUP BY Специальность
HAVING COUNT (*) > 1
Результат будет зависеть от того, когда будет применяться условие в предложении WHERE — до или после условия в предложении HAVING. Чтобы устранить эту неопределенность, стандарт SQL устанавливает правило, согласно которому предложения WHERE должны применяться в первую очередь. Соответственно, в приведенном операторе порядок выполнения операций таков: выбираются студенты че гвертого курса; формируются группы; из групп выбираются те, которые удовлетворяют условию предложения HAVING; выводятся результаты. В данном случае результат выглядит так:
(Этот запрос допустим не во всех реализациях SQL. В некоторых реализациях единственные атрибуты, которые могут фигурировать во фразе SELECT запроса с предложением GROUP BY, — это атрибуты из фразы GROUP BY и встроенные функции от этих атрибутов. Таким образом, в данном запросе допустимыми будут только атрибут Специальность и встроенные функции от этого атрибута.)
