Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Уд.DOC
Скачиваний:
7
Добавлен:
27.10.2018
Размер:
1.11 Mб
Скачать

10. Язык sql

Основы языка разработаны в середине 70-х годов в рамках экспериментальных работ над системой System R. В 80-е годы SQL приобрел современное название, был расширен и реализован в таких промышленных СУБД как Oracle, Ingres, DB2, Informix. Попытка устранить разногласия многочисленных реализаций привела к созданию первого стандарта SQL (1986 – 1989 гг.), зафиксировавшего небольшое количество операторов языка. Следующим шагом стандартизации явился стандарт SQL2 (1992 г.), в котором стандартная часть языка была значительно расширена. Кроме того, стандартизация была распространена на таблицы-каталоги, предназначенные для хранения служебной информации (метаданных). Выход следующего стандарта SQL3 был намечен на 1995 год, но сложность согласования разнородных предложений застопорила работу на предварительном этапе. В настоящее время SQL версии 2 является базой для подавляющего большинства серверных СУБД и входит в ограниченном объеме в языки персональных СУБД.

В составе языка SQL2 можно выделить 5 основных групп операторов и средств:

1. Операторы определения данных.

Сюда относятся такие основные операторы языка, как

CREATE SCHEMA – создание БД,

CREATE DOMAIN – создание домена,

CREATE TABLE – создание таблицы,

CREATE VIEW – создание виртуальной таблицы (представления),

CREATE CURSOR – создание навигационной таблицы (курсора),

а также операторы изменения и уничтожения описаний, операторы работы с описаниями вспомогательных объектов БД.

2. Операторы и средства определения ограничений целостности.

Имеющиеся в языке возможности позволяют задать в описаниях данных свойства обязательности (NOT NULL), уникальности (UNIQUE), значения по умолчанию (DEFAULT), пользовательское предикатное ограничение (CHECK). Ограничения могут задаваться как на уровне поля, так и на уровне таблицы. Для контроля ссылочной целостности могут задаваться первичный и внешний ключи (PRIMARY KEY, FOREIGN KEY), триггеры(ON DELETE, ON UPDATE) со стандартными реакциями (CASCADE, SET NULL, SET DEFAULT, NO ACTION). Имеется возможность задания автономных ограничений (ASSERTION) и отложенности проверки ограничений до конца транзакции.

3. Операторы выборки и модификации данных.

Сюда относятся операторы:

SELECT – выборка данных,

INSERT – добавление данных,

UPDATE – обновление данных,

DELETE – удаления данных.

4. Операторы управления транзакциями.

Основными операторами являются COMMIT – завершение транзакции с фиксацией результатов выполнения транзакции и ROLLBACK – завершение транзакции с отменой результатов выполнения транзакции (откат транзакции). Также возможно задание условий выполнения транзакции (SET TRANSACTION) с выбором стандартного уровня изолированности транзакций.

5. Операторы управления доступом к данным.

Основными операторами являются GRANT - назначения привилегий (прав выполнения операций с данными и программами) и REVOKE - отмены ранее назначенных привилегий.

В целом, язык SQL не является самодостаточным для создания приложений БД и их полномасштабного обслуживания. Поэтому разработчикам приложений предоставляется различные формы соединения языка SQL с другими (внешними) языками.

Основными формами введения возможностей SQL во внешний язык являются:

1. Локальный SQL.

Операторы SQL включаются во внешний язык наравне с прочими операторами и обрабатываются расширенным транслятором внешнего языка как его «родные» операторы. Таким образом, имеет место расширение исходного языка на группу операторов SQL с соответствующим расширением транслятора.

2. Встроенный SQL.

В текст программы на внешнем языке операторы SQL включаются с явным их выделением. Например, встраивание операторов SQL в текст С-программы выполняется в виде:

EXEC SQL

<SQL-оператор>

END SQL

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

3. Модульный SQL.

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

4. Динамический SQL.

Операторы SQL определяются не на момент создания пакета программы, а на момент ее исполнения. Таким образом, трансляция SQL-операторов откладывается на время выполнения программы, что позволяет реализовывать заранее непредвиденные запросы.

Наиболее проработанным и идеологически важным оператором языка SQL является оператор выборки SELECT. Основная форма оператора имеет вид:

SELECT <поля выборки>

FROM <таблицы>

WHERE <условия отбора записей>

GROUP BY <поля группирования>

HAVING <условия отбора группы>

Оператор описывает:

- откуда брать данные,

- каким требованиям должна удовлетворять отобранная информация,

- в каком виде представить результаты выборки.

Таким образом, в операторе SELECT определяется, «что должно быть получено», а не «как это получить», что показывает связь оператора SELECT с реляционным исчислением. Способ получения требуемых результатов определяется исполнительной системой. Простейшая схема решения поставленной задачи (без группирования) имеет вид:

1. Объединить таблицы исходных данных (декартово произведение).

2. Отобрать записи объединенной таблицы согласно условиям WHERE (ограничение).

3. Отобрать указанные поля выборки в результирующую таблицу (проекция).

Указанная схема показывает связь оператора SELECT с реляционной алгеброй. Дополнительно оператор SELECT включает нереляционные операции. Опция GROUP BY задает группировку отобранных записей с созданием обобщенных групповых записей. Каждая группа соответствует определенному сочетанию значений полей группирования и заменяется соответствующей обобщенной записью с агрегированными итоговыми данными по группе. Опция HAVING задает аналогично WHERE условия отбора, но не для отдельных записей, а для групп.

Использование оператора SELECT лежит в основе создания виртуальных таблиц (представлений). Общая форма описания представления имеет вид:

CREATE VIEW <имя представления> AS <оператор SELECT>.

Таким образом, в БД хранится не сама табличная информация, а лишь способ ее оперативного получения. Использование представлений позволяет скрыть от пользователя излишние для него детали организации БД, реализовать дополнительные возможности контроля доступа к данным, минимизировать объем передаваемой и обрабатываемой информации.