Базы данных

Вид материалаДокументы

Содержание


Вопрос № 15 Языки общения с СУБД (SQL, QBE)
Рис.1 Обработка SQL – запроса базой данных.
Create table
Alter table
Create index
Data Manipulation Language (DML
Transaction Control Language (TCL).
Set transaction
Рис.2 Структура оператора SQL
Задание сложных запросов
Переменные для примера
Связывание файлов
Описание ответа
Дополнительные возможности
Подобный материал:
1   ...   8   9   10   11   12   13   14   15   16

Вопрос № 15 Языки общения с СУБД (SQL, QBE)


SQL

Сами по себе данные в компьютерной форме не представляют интерес для пользователя, если отсутствуют средства доступа к ним. Доступ осуществляется в виде запросов, которые формулируются на стандартном языке запросов. Сегодня для большинства СУБД таким языком является SQL.

Его появление и развитие как средства описания доступа к базе данных связано с созданием теории реляционных баз данных. Прообраз языка возник в 1970 году в лаборатории Санта-Тереза фирмы IBM в рамках научно-исследовательского проекта System/R. Первоначально он назывался SEQUEL(Structured English Query Language), потом SEQUEL/2, а затем просто – SQL. Сегодня - это фактический стандарт интерфейса с современными СУБД. Популярность его настолько велика, что разработчики нереляционных СУБД (например, ADABAS), снабжают свои системы SQL-интерфейсом.

Язык SQL имеет официальный стандарт - ANSI/ISO. Большинство разработчиков придерживаются этого стандарта, однако часто расширяют его для реализации новых возможностей обработки данных.

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

SQL не является языком программирования в традиционном представлении. На нем пишутся не программы, а запросы к базе данных, поэтому это язык называют декларативным, не процедурным. Это означает, что с его помощью можно сформулировать, что необходимо получить, однако нельзя указать, как это следует сделать. В частности, в отличие от процедурных языков программирования (Си, Паскаль), в языке SQL отсутствуют алгоритмические конструкции, операторы цикла, условные переходы и т.д.

Запрос в языке SQL состоит из одного или нескольких операторов, следующих один за другим и разделенных точкой с запятой. Наиболее важные операторы выделены в стандарте ANSI/ISO SQL.

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

Различают два основных метода использования встроенного SQL: статический и динамический. При статическом использовании языка (статический SQL) в тексте программы имеются вызовы функций языка SQL, которые жестко включаются в выполняемый модуль после компиляции. Изменения в вызываемых функциях могут быть на уровне отдельных параметров вызовов с помощью переменных языка программирования. При динамическом использовании языка (динамический SQL) предполагается динамическое построение вызовов SQL-функций и интерпретация этих вызовов, например, обращение к данным удаленной базы, в ходе выполнения программы. Динамический метод обычно применяется в случаях, когда в приложении заранее неизвестен вид SQL-вызова и он строится в диалоге с пользователем.

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

Неполнота стандарта SQL-89 привела к появлению в 1992г. следующей версии языка SQL. SQL-92 охватывает практически все необходимые проблемы: манипулирование схемой базы данных, управление транзакциями и сессиями, динамический SQL. В стандарте существуют три уровня: базовый, промежуточный и полный. Только в последнее время СУБД ведущих производителей обеспечивается совместимость с полным вариантом языка.

Рис.1 Обработка SQL – запроса базой данных.

Появление новых требований пользователей к СУБД и обрабатываемым данным привели к тому, что в настоящее время ведется работа по разработке SQL 3. Эта версия языка, видимо, будет иметь в своем составе механизм триггеров, определение произвольного типа данных, серьезные объектные расширения. Пока же крупнейшие производители СУБД затягивают разработку этого стандарта, совершенствуя и расширяя собственные версии языка SQL. Процесс обработки SQL- запроса представлен схематично на рис. 1.


Основные операторы языка SQL.

Операторы DDL. Таблица 1.



Оператор

Описание

CREATE TABLE

Добавление новой таблицы к базе данных

DROP TABLE

Удаление таблицы из базы данных

ALTER TABLE

Изменение структуры имеющейся таблицы

CREATE VIEW

Добавление нового представления к базе данных

DROP VIEW

Удаление представления

CREATE INDEX

Создание нового индекса

DROP INDEX

Удаление существующего индекса
Data Definition Language (DDL).

Эта составляющая языка содержит операторы, позволяющие создавать, модифицировать и уничтожать базы данных и объекты внутри них (таблицы, представления) (см. таблицу 1).

Data Manipulation Language (DML).

Эта составляющая языка содержит операторы, позволяющие добавлять, выбирать, удалять и модифицировать данные. Эти операторы не обязательно должны завершать транзакцию, внутри которой они вызваны. Описание операторов представлено в таблице 2. Операторы DML. Таблица 2.


Оператор

Описание

SELECT

Выбор данных

INSERT

Вставка данных

DELETE

Удаление данных

UPDATE

Обновление данных
Иногда оператор SELECT относят к отдельной категории Data Query Language (DQL).

Transaction Control Language (TCL).

Операторы данного класса (см. таблицу 3) применяются для управления изменениями, выполняемыми группой операторов DML.

Операторы TCL. Таблица 3 .


Оператор

Описание

COMMIT

Завершение транзакции и сохранение изменений в базе данных

ROLLBACK

Откат транзакции и отмена изменений в базе данных

SET TRANSACTION

Установка параметров доступа к данным в текущей транзакции
Data Control Language (DCL).


Оператор

Описание

GRANT

Присвоение привилегии

REVOKE

Отмена привилегии
Операторы Data Control Language (см. таблицу 4), иногда называемые операторами Access Control Операторы DCL. Таблица 4. Language, применяются для осуществления административных функций, присваивающих или отменяющих право (привилегию) использовать базу данных, таблицу базы данных, а также выполнять те или иные операторы SQL.

Все операторы SQL имеют вид, представленный на рис.2.


Рис.2 Структура оператора SQL

Каждый оператор SQL начинается с ключевого слова, которое определяет, что делает этот оператор (SELECT, INSERT, DELETE). В операторе содержатся предложения, содержащие сведения о том, над какими данными производятся операции. Каждое предложение начинается с ключевого слова, такого как FROM, WHERE и др. Структура предложения зависит от его типа: ряд предложений содержит имена полей или таблиц, некоторые могут включать дополнительные ключевые слова, константы или выражения.

В заключение отметим, что, по словам Дейта, язык SQL является гибридом реляционной алгебры и реляционного исчисления. В нем имеются элементы алгебры (оператор объединения UNION) и исчисления (квантор существования EXISTS). Кроме того, язык SQL обладает реляционной полнотой.

Пример 1. Выбор записей.

Для таблицы ЕМР, имеющей поля: NAME (имя), SAL (зарплата), MGR (руководитель) и DEPT (отдел), требуется вывести имена сотрудников и размер их зарплаты, увеличенный на 100 единиц. Оператор выбора можно записать следующим образом:

     SELECT name, sal+100
     FROM emp.

Пример 2. Выбор с условием.
     Вывести названия таких отделов таблицы ЕМР, в которых в данный момент отсутствуют руководители. Оператор SELECT для этого запроса можно записать так:
     SELECT dept
     FROM emp
     WHERE mgr is NULL.

QBE

В современных СУБД широко используются табличные языки запросов. Наиболее распространенным среди них является язык QBE (Query-By-Example — запрос по примеру), предложенный М.М. Злуфом и базирующийся на исчислении доменов. Он является универсальным и не требует знания программирования. Язык QBE предназначен для работы с терминала и ориентирован на конечного пользователя. Язык QBE реализован во многих современных СУБД, например dBase IV, Paradox, ОФИС-ИНФО и др. Конкретные реализации этого языка несколько отличаются друг от друга, но все они построены по единому принципу. Суть подхода, воплощенного в языке QBE, заключается в следующем.

На экране дисплея высвечивается «скелет» (образ, форма, структура) одной или нескольких таблиц (файлов баз данных, отношений), данные из которых будут участвовать в запросе. «Скелет» выбранной пользователем таблицы выводится на экран дисплея в виде «шапки», в крайнем левом столбце которой записано название файла базы данных, а в остальных — имена полей файла. В этой форме пользователь определяет условия запроса. Например, если пользователю необходимо получить все записи с заданным значением определенного атрибута, то в соответствующем столбце «скелета» указывается это значение.

На рис. 5.1 представлен запрос к таблице, содержащей сведения о сотрудниках (kadr.dbf) и включающей следующие атрибуты:

FАМ — фамилия; IMIA —имя; VOZR —возраст; POL —пол; ADR —адрес; TABN — табельный номер.

Требуется выдать информацию о всех сотрудниках в возрасте 40 лет. В соответствующем столбце таблицы указывается цифра 40. В столбце можно записывать не только значение атрибута, но и знак операции сравнения; по умолчанию принимается знак « = ».

Задание сложных запросов. Допускается задание не только простых, но и сложных запросов, компоненты которых связаны операторами AND (и) или OR (или). Операторы AND и OR в явном виде не указываются при формулировании запроса. При отображении запросов на экране используется следующее правило: если в сложном запросе его компоненты представляют разные атрибуты и должны быть связаны оператором AND, то они записываются в одной строке (рис. 5.2). Если компоненты запроса должны быть связаны операторами OR, то они записываются на разных строках (рис. 5.3).

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

Переменные для примера. В некоторых случаях при формулировке запроса необходимо использовать так называемые «переменные для примера» («наполнители»). «Переменные для примера» (example variables) также записываются в определенных графах таблицы, но они обозначают не какое-либо определенное значение, а любое. Конкретное значение наполнителя не существенно. «Переменные для примера» используются для установления связей между атрибутами в одной или нескольких таблицах.

Константы, применяемые для задания значений ключей поиска, и переменные, указываемые для примера, должны при записи запроса отличаться друг от друга. В разных СУБД они различаются по-разному: в одних системах «наполнители» подчеркиваются, в других — используются специальные ограничители и т. п.

Связывание файлов. В некоторых запросах могут потребоваться данные из нескольких таблиц. Например, в базе данных, кроме файла KADR, имеется файл «выработка» (VRBT) с полями:

TABN — табельный номер; DAT — дата; KODDET — код детали; KOLV — количество.

В запросе «Выдать информацию о выработке рабочего Евгения Петрова» необходима совместная обработка файлов VRBT и KADR, так как в файле «выработка» нет сведений о фамилиях и именах. «Скелеты» обоих файлов должны быть вызваны на экран. Для связывания этих файлов по полю TABN используются «наполнители». Их значения могут быть любыми, но они должны быть одинаковыми в обеих таблицах.

В примере, представленном на рис. 5.4, в качестве наполнителя используется буква А, и она подчеркивается.

Описание ответа. Кроме задания условия отбора данных при описании запроса должна быть возможность указывать, какие атрибуты и в какой последовательности входят в ответ. Часто также требуется определить упорядоченность данных в ответе. Язык QBE обеспечивает такую возможность, но способы реализации ее в разных системах различны.

Дополнительные возможности. Кроме собственно поисковых запросов язык QBE позволяет выполнять и другие операции, например корректировку данных. Операции, которые надо выполнить, указываются в крайнем левом столбце под именем файла базы данных. Набор допустимых операций несколько различается в разных системах.