- •Глава 1 введение в банки данных 12
- •Глава 2 концептуальное проектирование 72
- •Глава 3 даталогическое проектирование 183
- •Глава 4 целостность базы данных 233
- •Глава 5 создание и ведение баз данных 251
- •Глава 6 язык запросов qbe 294
- •Глава 7 язык sql 347
- •Глава 8 создание экранных форм и страниц доступа 400
- •Глава 9 создание отчетов 441
- •Глава 10 распределенные банки данных 474
- •Предисловие
- •Глава 1 введение в банки данных
- •1.1. Понятие банка данных
- •1.2. Компоненты банка данных
- •1.2.1. Информационный компонент
- •1.2.2. Программные средства БнД
- •1.2.3. Языковые средства БнД
- •1.2.4. Технические средства БнД
- •1.2.5. Организационно-методические средства
- •1.2.6. Администраторы банка данных
- •1.2.7. Взаимодействие компонентов БнД
- •1.3. Классификация банков данных
- •1.3.1. Классификация баз данных
- •1.3.2. Классификации субд
- •1.3.3. Классификационные группировки, относящиеся к БнД в целом
- •1.4. Выбор субд
- •1.4.1. Тенденции развития субд
- •1.4.2. Общая характеристика проблемы выбора субд
- •1.4.3. Факторы влияния на выбор субд
- •1.4.4. Выбор субд
- •1.5. Уровни моделей и этапы проектирования бд
- •1.5.1. Уровни моделей
- •1.5.2. Взаимосвязь этапов проектирования бд
- •1.5.3. Факторы влияния на проектирование бд
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 2 концептуальное проектирование
- •2.1. Общие сведения о моделировании предметной области
- •2.1.1. Уточнение понятия концептуальной модели
- •2.1.2. Основные компоненты концептуальной модели
- •2.1.3. Требования, предъявляемые к концептуальной модели
- •2.1.4. Преимущества использования er-моделирования
- •2.2. Описание базовой er-модели
- •2.2.1. Понятия «объект» и «класс объектов»
- •2.2.2. Разновидности объектов
- •2.2.3. Изображение простого объекта
- •2.2.4. Описание свойств объекта. Разновидности свойств
- •2.2.5. Алгоритмические зависимости
- •2.2.6. Интегральные характеристики класса объектов
- •2.2.7. Связи между объектами
- •2.2.8. Сложные объекты
- •2.2.9. Рекомендации по построению базовой er-модели
- •2.3. Сравнение методик построения er-моделей
- •2.3.1. Несущественные различия в использовании условных обозначений
- •2.3.2. Различия в использовании и изобразительных средств, приводящие к изменениям в методике построения модели
- •2.3.3. Пространственное размещение элементов er-модели
- •2.3.4. Отсутствующие возможности
- •2.3.5. Различия в классификации объектов и отношений между ними
- •2.3.6. Терминологические различия
- •2.3.7. Соглашения по именованию элементов er-модели
- •2.3.8. Дополнительные характеристики case-средств
- •2.3.9. Использование графических пп для изображения er-моделей
- •2.4. Особенности методологии построения er-моделей
- •2.5. Использование Design/idef для проектирования баз данных
- •2.5.1. Построение er-модели при использовании Design/idef Общая характеристика
- •Описание сущности
- •Описание связи
- •Описание обобщенного объекта
- •2.5.2. Методология построения er-модели при использовании Design/idef
- •2.6. Особенности моделирования в erWin
- •2.6.2. Построение логической модели Создание новой сущности
- •Описание свойств сущности
- •Дополнительные свойства атрибутов
- •Описание обобщенных объектов
- •Задание связей между сущностями
- •2.6.3. Особенности методологии моделирования
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 3 даталогическое проектирование
- •3.1. Общие сведения о даталогическом проектировании
- •3.1.1. Исходные данные для даталогического проектирования
- •3.1.2. Результат даталогического проектирования
- •3.1.3. Подход к даталогическому проектированию
- •3.1.4. Определение состава базы данных
- •3.1.5. Введение искусственных идентификаторов
- •3.1.6. Критерии оценки бд
- •3.2. Особенности даталогических моделей
- •3.2.1. Внутризаписная структура
- •3.2.2. Межзаписная структура
- •3.3. Проектирование логической структуры реляционной базы данных
- •3.3.1. Вводные положения
- •3.3.2. Алгоритм перехода от базовой er-модели к схеме реляционной базы данных
- •Отображение простых объектов
- •Отображение связи между объектами
- •Отображение сложных объектов
- •Использование дополнительных характеристик концептуальной модели
- •Дополнительные рекомендации по проектированию бд
- •3.4. Создание физической модели в erWin
- •3.4.1. Выбор целевой субд
- •3.4.2. Нотации, используемые при построении физической модели
- •3.4.3. Уровни просмотра физической модели
- •3.4.4. Сравнение логической и физической моделей
- •3.4.5. Создание хранилищ данных
- •3.4.6. Переход к даталогической модели
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 4 целостность базы данных
- •4.1. Классификация ограничений целостности
- •4.2. Er-модели и ограничения целостности
- •4.3. Задание ограничений целостности в erWin
- •4.3.1. Обязательный атрибут
- •4.3.2. Ограничения целостности связи
- •4.3.3. Триггер ссылочной целостности
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 5 создание и ведение баз данных
- •5.1. Описание структуры баз данных. Общие сведения
- •5.2. Создание бд в Microsoft Access
- •5.2.1. Создание новой таблицы путем описания ее структуры
- •Описание полей таблицы
- •Определение ключа таблицы
- •Свойства полей
- •Сохранение описания таблицы
- •Создание таблиц для контрольного примера
- •5.2.2. Изменение структуры таблиц
- •5.2.3. Другие способы создания таблиц
- •5.2.4. Связывание таблиц
- •5.2.5. Просмотр связанных таблиц
- •5.2.6. Задание ограничений целостности в Access
- •Ограничения, относящиеся к полю
- •Ограничения, относящиеся к записи
- •Целостность связи
- •5.3. Организация ввода и корректировки данных в бд
- •5.3.1. Общие сведения
- •5.3.2. Возможности ввода данных в Access
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 6 язык запросов qbe
- •6.1. Общая характеристика языка qbe
- •6.2. Реализация ове в Access
- •6.2.1. Общие сведения
- •Добавление таблиц в запросе
- •Удаление таблицы из запроса
- •6.2.4. Включение полей в запрос
- •6.2.5. Поля, выводимые в ответ
- •6.2.6. Управление выводом повторяющихся строк
- •6.2.7. Простые запросы
- •6.2.8. Сложные запросы
- •6.2.9. Просмотр ответа
- •6.2.10. Определение числа записей, выводимых в ответ
- •6.2.11. Формирование запросов к связанным таблицам
- •6.2.12. Выполнение агрегирующих операторов
- •6.2.13. Вычисляемые поля
- •6.2.14. Перекрестные запросы
- •6.2.15. Создание запроса с параметрами
- •6.2.16. Корректирующие запросы
- •6.2.17. Запрос на создание таблицы
- •6.2.18. Специальные запросы
- •6.2.19. Режим сводной таблицы и сводной диаграммы
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 7 язык sql
- •7.1. Общая характеристика sql
- •7.2. Описание базы данных
- •7.2.1. Описание таблиц
- •7.2.2. Ограничения целостности
- •7.3. Запросы на выборку
- •7.4. Возможности корректировки хранимых данных
- •7.5. Создание представлений (view)
- •7.6. Создание и использование курсоров
- •Управление транзакциями
- •7.8. Стандартный sql-92
- •7.8.1. Создание объектов Виды объектов
- •Определение таблицы
- •Определение домена
- •7.8.2. Запросы Оператор select
- •Запросы, затрагивающие несколько таблиц
- •Корректирующие операторы
- •7.8.3. Создание представлений (view) Оператор create view
- •Цели использования представлений
- •Ограничения при использовании представлений
- •Создание представлений с использованием erWin
- •7.8.4. Курсоры
- •7.9. Ms Jet Access sql
- •7.9.1. Оператор select Общая характеристика оператора
- •Предложение select
- •Предложение from
- •Предложение where
- •Предложение group by
- •Предложение having
- •Предложение order by
- •7.9.2. Подчиненные запросы sql
- •7.9.3. Корректирующие операторы Добавление
- •Обновление
- •Удаление записей
- •7.9.4. Запрос к серверу
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 8 создание экранных форм и страниц доступа
- •8.1. Понятие, классификация и роль экранных форм
- •8.2. Рекомендации по созданию форм
- •8.3. Создание экранных форм в субд Access
- •8.3.1. Выбор способа создания формы
- •8.3.2. Создание форм с помощью Мастера Создание простой связанной формы с помощью Мастера
- •Создание многотабличной формы с помощью Мастера
- •8.3.3. Корректировка формы в режиме Конструктор
- •Изменения, связанные с уже включенными в форму элементами управления
- •Включение новых элементов в форму
- •Изменение типа элемента управления
- •Создание форм, состоящих из нескольких страниц
- •Последовательность обхода полей
- •Свойства формы
- •Задание ограничений целостности при создании форм
- •Добавление кнопок в форму
- •8.3.4. Кнопочная форма
- •8.3.5. Возможные случаи возникновения ошибок
- •8.3.6. Открытие формы в режиме сводной таблицы или в режиме диаграммы
- •8.3.7. Создание страниц доступа
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 9 создание отчетов
- •9.1. Общая характеристика отчетов
- •9.2. Создание отчетов в системе Access
- •9.2.1. Выбор способа создания отчета
- •9.2.2. Создание отчетов с использованием Мастера отчетов
- •9.2.3. Корректировка отчета в режиме Конструктор Переход в режим Конструктор
- •Корректировка отчета
- •Вычисления в отчете
- •Ввод нового поля в отчет
- •Группировка
- •Использование графических элементов
- •Задание номеров страниц
- •9.2.4. Создание отчета, базирующегося на нескольких таблицах
- •9.2.5. Создание сложных отчетов
- •9.2.6. Свойства
- •9.2.7. Создание отчета анкетной формы
- •9.2.8. Совместная работа с другими приложениями ms Office
- •На это следует обратить внимание
- •Контрольные вопросы
- •Глава 10 распределенные банки данных
- •10.1. Основные понятия
- •10.2. Классификация рБнД
- •10.3. Транзакции
- •10.3.1. Понятие транзакции
- •10.3.2. Плоские транзакции
- •10.3.3. Контрольные точки
- •10.3.4. Многозвенные транзакции
- •10.3.5. Вложенные транзакции
- •10.4. Проблемы параллелизма и пути их решения
- •10.4.1. Параллелизм
- •10.4.2. Блокировки
- •10.4.3. Режимы доступа к информации
- •10.4.4. Уровни изоляции в sql
- •10.4.5. Использование хранимых процедур и триггеров для контроля целостности бд
- •10.5. Тиражирование данных
- •10.5.1. Основные понятия
- •10.5.2. Преимущества и недостатки тиражирования
- •10.5.3. Виды тиражирования
- •10.6. Обеспечение целостности и безопасности данных в рбд
- •10.6.1. Особенности обеспечения целостности в рбд
- •10.6.2. Средства защиты данных Способы защиты данных
- •Создание и удаление пользователей
- •Определение и отмена привилегий
- •10.7. Работа в распределенной среде при использовании субд Access
- •10.7.1. Способы совместного использования данных в Access
- •10.7.2. Виды блокировок
- •10.7.3. Проекты Microsoft Access
- •10.7.4. Средства защиты Microsoft Access Управление правами доступа пользователей
- •Средства защиты бд
- •На это следует обратить внимание
- •Контрольные вопросы
- •Приложения
- •1. Основные понятия реляционной модели данных
- •1. Информационные единицы.
- •2. Ключи.
- •3. Связи.
- •2. Сквозной пример использования er-моделирования для проектирования бд
- •Глоссарий
- •Литература
- •Сокращения
7.9.1. Оператор select Общая характеристика оператора
Оператором SQL, осуществляющим отбор информации из базы данных, является SELECT или его разновидность - SELECT...INTO.
Синтаксис оператора SELECT в Access имеет следующий вид:
SELECT [предикат] {* | таблица.* | [таблица.]поле1
[AS псевдоним1] [, [таблица.]поле2 [AS псевдоним2] [,...]]}
FROM выражение [,...] [IN внешняя_база_данных]
[WHERE... ]
[GROUP BY...]
[HAVING...]
[ORDER BY...]
[WITH OWNERACCESS OPTION]
Как видим, синтаксис оператора SELECT в Access несколько отличается от стандарта. Конструкции [IN внешняя_база_данных] и [WITH OWNERACCESS OPTION] отсутствуют в стандарте SQL.
Ниже перечислены аргументы оператора SELECT.
Аргумент |
Описание |
Предикат
|
Один из следующих предикатов отбора: ALL,DISTINCT, DISTINCTROW или ТОР. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL |
*
|
Указывает, что выбраны все поля заданной таблицы (таблиц) |
Таблица |
Имя таблицы, из которой должны быть отобраны записи |
Поле1, поле2
|
Имена полей, из которых должны быть отобраны данные. Порядок следования полей в запросе определяет, в каком порядке соответствующие значения будут выводиться в ответ |
Псевдоним1 Псевдоним2 |
Имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице |
Выражение
|
Имена одной или нескольких таблиц, которые содержат отбираемые данные |
Внешняя_база_данных
|
Имя базы данных, которая содержит таблицы, указанные с помощью предыдущего аргумента, если они находятся не в текущей базе данных |
Имена полей, которые содержат пробелы или знаки препинания, необходимо заключать в квадратные скобки ([ ]).
Описание WITH OWNERACCESS OPTION используется при работе в сети в составе защищенной рабочей группы и здесь рассматриваться не будет.
Предложение select
Предложение SELECT оператора SELECT служит для указания полей, выводимых в результатную таблицу. Это могут быть поля исходных таблиц, вычисляемые поля или поля, содержащие константу. Имена полей, выводимых в ответ, разделяются между собой запятой.
Для отбора всех полей таблицы можно использовать звездочку (*). Следующий оператор отбирает все поля из таблицы «Сотрудник»:
SELECT * FROM Сотрудник;
Если в запросе используется несколько таблиц, то перед знаком (*) следует поместить имя таблицы, из которой будут выводиться все поля, отделенные от этого знака точкой:
SELECT ФИО, Семья.*
FROM Сотрудник INNER JOIN Семья
ON Сотрудник.Код_сотрудника = Семья.Код_сотрудника;
В данном примере из таблицы «Семья» в ответ выводятся все поля, а из таблицы «Сотрудник» - только поле ФИО.
Поясним значение предикатов, используемых в качестве аргументов оператора SELECT.
Предикат ALL является значением по умолчанию. Если оператор SQL не содержит ни одного предиката, то считается, что используется предикат ALL. При этом в ответ выдаются все строки результатной таблицы, даже если они совпадают.
Приведенные ниже операторы (1) и (2) SQL эквивалентны; они возвращают все записи из таблицы «Сотрудники»:
SELECT ALL*
FROM Сотрудники;
SELECT *
FROM Сотрудники;
Предикат DISTINCT исключает из результатной таблицы повторяющиеся строки. Предикат DISTINCTROW опускает данные, основанные на целиком повторяющихся записях. Предикат DISTINCTROW влияет на результат только в случае, если в запрос включены не все поля анализируемых таблиц. Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу или все поля всех таблиц.
Поясним разницу между DISTINCTROW и DISTINCT на следующих примерах. Пусть имеется таблица «Расписание»:
Расписание | ||
Код_сотрудника |
Код_предмета |
Дата |
2 |
1 |
01.01.2002 |
3 |
1 |
01.01.2002 |
2 |
1 |
02.01.2002 |
3 |
1 |
02.01.2002 |
2 |
2 |
01.01.2002 |
3 |
5 |
02.01.2002 |
Использование оператора SELECT с DISTINCTROW
SELECT DISTINCTROW сотрудник.фио, расписание.код_предмета
FROM сотрудник INNER JOIN расписание
ON сотрудник.код_сотрудника = расписание.код_сотрудника;
даст следующий результат:
Distinctrow | |
ФИО |
Кодпредмета |
Жуков О. А. |
1 |
Жуков О.А. |
2 |
Жуков О.А. |
1 |
Бурлак Г.Н. |
1 |
Бурлак Г.Н. |
5 |
Бурлак Г.Н. |
1 |
Использование оператора SELECT с DISTINCT
SELECT DISTINCT СОТРУДНИК.ФИО, расписание.код_предмета
FROM СОТРУДНИК INNER JOIN расписание
ON СОТРУДНИК.Код_сотрудника = расписание. код_сотрудника;
даст привычный результат, когда в ответ включаются только неповторяющиеся строки результатной таблицы:
Distinct | |
ФИО |
Код__предмета |
Бурлак Г.Н. |
1 |
Бурлак Г.Н. |
5 |
Жуков О.А. |
1 |
Жуков О.А. |
2 |
Если пользоваться QBE как построителем запросов на SQL, то для включения в запрос DISTINCT следует для свойства запроса «уникальные значения» выбрать значение «Да», а для включения в запрос DISTINCTROW необходимо выбрать значение «Да» для свойства запроса «Уникальные записи».
Предикат ТОР позволяет возвращать определенное число записей из общего числа записей, получающегося в результате отбора по заданному условию.
Предикат ТОР часто используется совместно с предложением ORDER BY для обеспечения возможности вывода в ответ записей, находящихся в начале или в конце некоего диапазона. При этом в зависимости от запроса выбирается нужный вид упорядочения (ASC или DESC).
Следующая инструкция SQL позволяет получить список пяти лучших студентов выпуска 2002 г.:
SELECT TOP 5 Имя, Фамилия
FROM Студенты
WHERE ГодВыпуска =2002
ORDER BY СреднийБалл DESC;
Предикат ТОР не осуществляет выбор между равными значениями. Если в предыдущем примере средние баллы пятого и шестого студента будут равны, то запрос возвратит шесть записей.
Кроме того, можно использовать зарезервированное слово PERCENT для возврата определенного процента записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY Предположим, что вместо пяти лучших студентов следует отобрать 10% студентов с наиболее низкой успеваемостью:
SELECT TOP 10 PERCENT Фамилия, Имя
FROM Студенты
WHERE ГодВыпуска = 1994
ORDER BY СреднийБалл ASC;
Предикат ASC обеспечивает упорядочение по возрастанию. В принципе его можно было не указывать, так как ASC является значением по умолчанию.
Значение, следующее после предиката ТОР, должно быть числовым значением без знака типа Integer.
Следует обратить внимание на то, что аргументы DISTINCTROW и ТОР, используемые в Access, отсутствуют в стандарте SQL.
Если запрос затрагивает несколько таблиц и в них имеются одноименные поля, перед именами таких полей необходимо ввести имя таблицы и знак « . » (точка).
Предположим, что есть две таблицы: «Продукция» (с полями «Код_продукции», «Наименование_продукции») и «Поставка» (с полями «Код_продукции», «Дата», «Количество»). Поле «Код_продукции» содержится в обеих таблицах. Следующий оператор SQL отберет поле «Наименование_продукции» и «Код_продукции» из таблицы «Продукция» и поля «Дата» и «Количество» из таблицы «Поставка»:
SELECT Продукция.Код_продукции, Наименование_продукции,
Дата, Количество
FROM Поставка, Продукция
WHERE Продукция.Код_продукции = Поставка.Код_продукции
AND Наименование_продукции = "кефир";
Если не указать имя таблицы при перечислении полей, присутствующих в нескольких таблицах, то будет выдано сообщение об ошибке.
Если создавать запрос SQL, пользуясь QBE как построителем, то имя таблицы будет как префикс указываться перед именем поля всегда, а не только тогда, когда это действительно необходимо. Кроме того, для объединения таблиц всегда используется операция JOIN в предложении FROM. Тот же по смыслу запрос, полученный путем создания запроса на QBE с последующим переходом из режима Конструктор в режим SQL, будет выглядеть следующим образом:
SELECT продукция.Код_продукции,
продукция.Наименование_продукции, Поставка.дата, Поставка.
количество
FROM продукция INNER JOIN Поставка
ON продукция.Код_продукции = Поставка.Код_продукции
WHERE (((продукция.Наименование_продукции)="кефир"))5;
При выводе результатов ответа в режиме таблицы имена полей используются в качестве заголовков столбцов. Для изменения заголовка столбца следует использовать зарезервированное слово AS. Использование предложения AS эквивалентно определению свойства «Псевдоним» (Alias) в бланке свойств списка полей в режиме Конструктор запросов.
Использование псевдонимов особенно важно, когда в БД используются короткие английские названия полей или в ответ выводятся вычисляемые поля. Нижеследующий пример демонстрирует использование псевдонима для вычисляемого поля:
SELECT сотрудник.ФИО, [оклад]*0.5 AS Премия
FROM сотрудник;