- •Глава 1. Базы данных и системы управления 9
- •Глава 2. Организация доступа к данным 45
- •Глава 3. Реляционная алгебра 60
- •Глава 4. Основы sql 67
- •Глава 5. Проектирование реляционных баз данных 89
- •Глава 6. Взаимодействие sql с приложениями 116
- •Глава 7. Некоторые проблемы администрирования баз данных 154
- •Базы данных и системы управления
- •Файловые системы
- •Концепция баз данных
- •Основные функции субд
- •Непосредственное управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация
- •Поддержка языков баз данных
- •Трехуровневая модель архитектуры систем баз данных
- •Модели данных
- •Характеристика связей
- •Компьютерно-ориентированные модели данных
- •Реляционный подход
- •Ключи и целостность реляционных данных
- •Моделирование концептуальной схемы базы данных
- •Организация доступа к данным
- •Страницы и файлы
- •Индексирование
- •Структуры типа б-дерева
- •Хеширование
- •Методы сжатия
- •Метод дифференциального сжатия
- •Иерархические методы сжатия
- •Кодирование по методу Хаффмена
- •Реляционная алгебра
- •Традиционные реляционные операции
- •Специальные реляционные операции
- •Дополнительные реляционные операции
- •Примеры использования реляционной алгебры для выражения словесных запросов в виде формул
- •Основы sql
- •Типы данных
- •Строковые типы данных
- •Битовые типы данных
- •Точные числовые типы данных
- •Вещественные числовые типы данных
- •Календарные типы данных
- •Значения null
- •Создание и обслуживание таблиц
- •Запрос на выборку
- •Статистические функции
- •Создание соединений
- •Вложенные запросы
- •Запрос на объединение
- •Запросы, выполняющие реляционные операции вычитания, пересечения и деления
- •Запросы на изменение
- •Перекрестные запросы
- •Проектирование реляционных баз данных
- •Нормализация отношений
- •Функциональные зависимости
- •Н ормальные формы, обоснованные функциональными зависимостями
- •Нормальная форма Бойса–Кодда
- •Нормальные формы, обоснованные более сложными зависимостями
- •Процедура нормализации и проектирования
- •Пример проектирования базы данных
- •Назначение и предметная область
- •Проектирование базы данных
- •Взаимодействие sql с приложениями
- •Встраивание sql-операторов в программный код
- •Тип курсора
- •Триггеры
- •Хранимые процедуры
- •Стандартные интерфейсы для доступа к данным
- •Информационное окружение веб-сервера
- •Стандарт odbc
- •Уровни соответствия
- •Уровень соответствия odbc
- •Задание имени источника данных odbc
- •Расширяемый язык разметки xml
- •Xml как язык разметки
- •Материализация хмl-документов с помощью xslt
- •Создание хмl-документов на основе информации из базы данных
- •Некоторые проблемы администрирования баз данных
- •Оптимизация запросов
- •Параллельная обработка данных
- •Потеря обновления
- •Зависимость от незафиксированных обновлений
- •Несогласованный анализ
- •Блокировки транзакций
- •Согласованность и уровень изоляции транзакций
- •Распределенные системы баз данных
- •Фрагментация
- •Репликация
- •Распространение обновлений
- •Управление каталогом
- •Распределенная обработка запросов
- •Типы распределенных систем баз данных
- •Нераспределенные мультибазовые субд
- •Клиент-серверные системы
- •Системы с общими ресурсами
- •Технические аспекты администрирования базы данных
- •Восстановление базы данных
- •Безопасность баз данных
- •Шифрование данных
- •Производительность баз данных
- •Администрирование данных
- •Литература
Запрос на выборку
Для создания запроса на выборку используется команда SELECT. Она возвращает таблицу, называемую представлением и содержащую поля, выбранные из базовых таблиц или из созданных ранее представлений:
SELECT [ALL/DISTINCT] [TOP n [PERCENT]] список полей FROM имена таблиц [WHERE условие отбора] [ORDER BY столбцы сортировки [ASC/DESC]];
В списке полей команды SELECT указываются поля, которые должны быть включены в результирующую таблицу запроса и их имена в этой новой таблице (представлении). В этом случае SELECT выполняет операцию проекции, а условие отбора WHERE – операцию выборки). Имена полей разделяются запятыми. Необязательные параметры ALL и DISTINCT определяют способ отбора строк:
ALL – включает все строки, соответствующие указанным далее условиям отбора;
DISTINCT (ключевое слово из ANSI SQL-92) – исключает строки с повторяющимися данными на основе только данных результирующего набора записей;
Необязательный параметр TOP n [PERCENT] ограничивает количество записей в результирующей таблице первыми n или n% набора.
Оператор FROM определяет имена таблиц, из которых должны выбираться данные.
WHERE определяет условие для отбора записей и реализует реляционную операцию выборки. Условие задается текстовым оператором типа LIKE для текстовых полей или числовыми операторами типа >, <, =, < >, >=, BETWEEN для числовых полей. Если WHERE не использован, то запрос возвратит все записи, удовлетворяющие критерию SELECT.
Модификатор ORDER BY определяет порядок сортировки записей в созданной таблице. Ключевыми словами ASC и DESC можно определить сортировку по возрастанию или убыванию соответственно.
Пример инструкции запроса на выборку:
SELECT Имя_Д, Вес FROM Детали WHERE Вес>500 ORDER BY [Вес] DESC;
Результатом выполнения запроса будет новая таблица, содержащая два столбца Имя_Д и Вес и множество строк, удовлетворяющих условию Вес>500, отсортированных по убыванию веса.
Статистические функции
Статистические или агрегатные функции (итоговые в реляционной алгебре) используются тогда, когда необходимо определить статистические данные (сумму, среднее, минимальное, максимальное и т.п.) группы записей с общим значением атрибута. Для этого используется инструкция GROUP BY:
SELECT статистическая функция (имя поля) AS заголовок поля [, список полей] FROM имена таблиц [WHERE условие отбора] GROUP BY условие группировки [HAVING условие для результата] [ORDER BY столбцы сортировки];
Поле, используемое как аргумент статистической функции, должно содержать данные числового типа.
Ключевое слово AS определяет заголовок столбца результирующего набора записей. GROUP BY определяет столбец, по значениям которого записи объединяются в группы, к которым применяется статистическая функция и возвращает одно значение. HAVING позволяет ввести одно или несколько условий, налагаемых на значение результирующего столбца, полученного в результате группировки и применения статистической функции.
Примеры команд SQL, применяющих статистические функции:
Общее количество деталей можно получить следующим образом:
SELECT SUM(Поставки.Кол) FROM Поставки;
В предложении SELECT можно указывать несколько скалярных выражений:
SELECT MIN(Кол), MAX(Кол), SUM(Кол), AVG(Кол) FROM Поставки;
Такие запросы возвращают в качестве результата таблицу, состоящую из одной строки.
Количество кортежей в отношении можно посчитать следующим образом:
SELECT COUNT (*) AS Кол_кортежей FROM Поставки;
В результате получим таблицу из одной строки с заголовком “Кол_кортежей”.
Статистические функции можно применять как ко всем кортежам отношения, так и к отдельным группам кортежей. Для того, чтобы получить, например, количество деталей, поставляемых каждым поставщиком, применянтся оператор GROUP BY. В возвращенной таблице количество строк будет равно количеству поставщиков и результаты будут сгруппированы по одинаковым значениям атрибута группировки:
SELECT Пк.ПN, SUM(Пк.Кол) FROM Поставки AS Пк GROUP BY Пк.ПN;
(Здесь показан пример использования псевдонимов, которые вводятся в предложении FROM при помощи оператора AS (его можно и пропустить). Использование псевдонимов упрощает запись команд. Они также используются и для организации некоторых запросов.)
В предложении SELECT необходимо указывать атрибут, по которому производится группировка и нельзя указывать имена атрибутов, не входящих в предложение GROUP BY (но можно указывать несколько статистических функций).
На создаваемые оператором GROUP BY результаты можно накладывать ограничения оператором HAVING, например:
SELECT Пк.ПN, SUM (Пк.Кол) FROM Поставки AS Пк GROUP BY Пк.ПN HAVING COUNT(*)>2;
Предложение HAVING COUNT(*)>2 выделяет только те группы, в которых количество кортежей больше 2 (поставщики выполнили более 2 поставок).