Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
24
Добавлен:
20.06.2014
Размер:
128 Кб
Скачать

5.4. Обработка данных

Взаимодействие клиентов с СУБД осуществляется посредством запросов на обработку данных. (Отметим, что клиентом может быть как человек — пользователь, так и программа, использующая СУБД в рамках информационной системы.)

Согласно реляционной модели (см. “Реляционные БД” 2), все данные организованы в таблицы и, соответственно, все запросы обрабатывают таблицы. Очень важно подчеркнуть, что таблицы находятся не только на входе, но и на выходе любого запроса. То есть результатом любого запроса всегда является таблица.

Отметим, что таблицы, являющиеся исходными данными запроса, в свою очередь, могут являться результатом другого запроса.

На приведенной схеме пунктирные стрелки обозначают необязательные исходные данные запроса.

 

На приведенной схеме пунктирные стрелки обозначают необязятельные исходные данные запроса

Демонстрационная БД

Для рассмотрения всех дальнейших примеров нам понадобится небольшая демонстрационная база данных, заполненная минимумом информации. Возьмем для этих целей три таблицы из базы данных, которая служила для схожих иллюстративных целей в статье “Реляционные БД” 2. А именно, мы ограничимся таблицами “Учитель”, “Предмет” и таблицей связи “Учитель—Предмет”.

Допустим, что у нас есть три учителя. Иванов Иван Иванович преподает математику и информатику, Петров Петр Петрович — математику и физику, Сидорова Мария Ивановна — только информатику.

Реляционные операции

В реляционной модели определяются специальные реляционные операции над таблицами. Каждая реляционная операция производится над одной или несколькими таблицами. Результатом любой реляционной операции всегда является таблица. Все запросы на обработку данных выполняются посредством реляционных операций.

В статье “Реляционные БД” 2 отмечено, что теория реляционных баз данных была сформулирована Коддом на строгом математическом языке. Изложение указанной теории не входит в наши задачи, поскольку лежит далеко за рамками не только школьного курса, но и практики использования баз данных. Поэтому здесь мы акцентируем внимание читателя лишь на тех вопросах, которые являются важными для понимания сути механизмов выполнения типичных запросов. С этой точки зрения нельзя обойтись без рассмотрения трех реляционных операций: выбора, проектирования и соединения.

Операция выбора

Посредством операции выбора из таблицы можно выбрать строки, удовлетворяющие некоторому условию. Например, из таблицы “Учитель—Предмет” посредством операции выбора можно выбрать все строки, относящиеся к учителю с номером 2:

ВЫБРАТЬ ВСЕ ПОЛЯ ИЗ ТАБЛИЦЫ

"Учитель—Предмет" ГДЕ "Номер учителя"=2

Результатом операции выбора всегда является таблица (возможно, пустая). В нашем случае будут выбраны две строки:

 

 Операция проектирования предназначена для выбора подмножества столбцов таблицы. Например, если требуется получить лишь фамилии педагогов, это можно сделать посредством следующей операции проектирования:

ВЫБРАТЬ ПОЛЕ "Фамилия" ИЗ ТАБЛИЦЫ "Учитель"

Результатом операции будет следующая таблица:

Отметим, что в предыдущем примере операция проектирования также использовалась — она “спряталась” во фразе ВСЕ ПОЛЯ. А в последнем примере неявно используется операция выбора, только она выбирает все строки. Вообще явно или неявно операции выбора и проектирования используются при любой выборке информации из базы данных.

Операция соединения

Операция соединения применяется как минимум к двум таблицам. В простейшем случае соединение представляет собой декартово произведение таблиц, образованное из всевозможных комбинаций строк. Перед тем как рассмотреть операцию соединения на демонстрационной базе данных, рассмотрим простейший пример, иллюстрирующий идею декартова произведения в чистом виде.

Пусть имеются две таблицы — A и B, в каждой по одному полю. В таблице A две строки, в таблице B — три.

Декартовым произведением таблиц A и B будет таблица из двух полей и шести строк:

Возвращаясь к демонстрационному примеру, построим соединение таблиц “Учитель”, “Предмет” и “Учитель—Предмет”. Легко видеть, что пример получается достаточно громоздким. В нем 3 * 3 * 5 = 45 строк.

Само по себе соединение таблиц выглядит громоздким и бесполезным. Но истинная мощь реляционных операторов проявляется в их композиции.

Пусть нам требуется получить список учителей, дополненный предметами, которые они преподают. Для этого из соединения таблиц “Учитель”, “Учитель—Предмет” и “Предмет” надо выбрать строки, в которых номер учителя из таблицы “Учитель” совпадает с номером учителя из таблицы “Учитель—Предмет” и номер предмета из таблицы “Учитель—Предмет” совпадает с номером предмета из таблицы “Предмет”. Указанное логическое условие можно записать следующим образом:

"Учитель"."Номер учителя" = "Учитель—Предмет"."Номер учителя" И

"Учитель—Предмет"."Номер предмета" = "Предмет"."Номер предмета"

Соответствующие строки выделены в приведенной выше таблице — результате операции соединения.

Для решения последней задачи требуется применить все три операции — соединения, выбора и проекции. Соответствующий запрос имеет следующий вид:

ВЫБРАТЬ ПОЛЯ "Фамилия", "Имя", "Отчество", "Предмет"

ИЗ СОЕДИНЕНИЯ ТАБЛИЦ "Учитель", "Учитель—Предмет", "Предмет"

ГДЕ "Учитель"."Номер учителя" = "Учитель—Предмет"."Номер учителя" И

"Учитель—Предмет"."Номер предмета" = "Предмет"."Номер предмета"

При выполнении этого запроса сначала будет выполнена операция соединения и получена приведенная выше большая таблица. Затем посредством операции выбора из нее будут выбраны требуемые строки. И на последнем этапе с помощью операции проектирования будут оставлены лишь интересующие нас поля:

  

Язык SQL

Все реляционные СУБД поддерживают специальный язык SQL (Stuctured Query Language), на котором записываются запросы. Этот же язык упоминается в статье “Описание данных” 2, поскольку фактически SQL состоит из двух языков — DML (Data Manipulation Language) и DDL (Data Declaration Language).

История языка SQL началась в 1974 г. Первый прототип языка назывался SEQUEL (название образовано от Structured English Query Language). Впоследствии переработанная версия SEQUEL получила название SQL. Первый стандарт языка был принят в 1987 г.

SQL — декларативный язык. Это означает, что клиент лишь указывает, что именно ему требуется, а как это получить, решает сама СУБД.

Примеры подобных декларативных запросов были приведены выше при иллюстрации реляционных операций. Эти примеры могут быть практически буквально переписаны на SQL с использованием самой употребительной команды языка SELECT. Продемонстрируем это.

Иллюстрация операции выбора

SELECT * FROM "Учитель-Предмет" WHERE "Номер учителя"=2

Иллюстрация операции проектирования

SELECT "Фамилия" FROM "Учитель"

Иллюстрация операции соединения

SELECT "Фамилия", "Имя", "Отчество", "Предмет"

FROM "Учитель", "Учитель—Предмет", "Предмет"

WHERE "Учитель"."Номер учителя" = "Учитель—Предмет"."Номер учителя" И

"Учитель—Предмет"."Номер предмета" = "Предмет"."Номер предмета"

Из этих примеров видно, что операцию выбора выполняет предложение WHERE, операцию проектирования — список полей после SELECT, а операцию соединения — запятая в предложении FROM.

Язык QBE

Язык QBE (Query By Example) был разработан отделением IBM Reseach в конце 70-х годов на основе шаблонов, предложенных Робертом Злуфом. Он был задуман как средство, облегчающее работу для неспециалистов. Этот язык получил у пользователей столь широкое признание, что в настоящее время он реализован практически по всех популярных СУБД.

Язык QBE использует визуальный подход к организации доступа к информации в базе данных. Работа в нем осуществляется посредством задания образцов значений в шаблоне запроса.

Усовершенствованная версия QBE — GQBE (графический QBE) используется в конструкторе запросов Microsoft Access. На следующем рисунке показано, как выглядит в GQBE запрос, который был использован для иллюстрации операции соединения.

Любая реализация QBE, в том числе и GQBE, является лишь интерфейсом к SQL.

Соседние файлы в папке Вопросы и ответы к экзамену по информатике