Файл: Базы данных - уч. пособие.pdf

Добавлен: 28.11.2018

Просмотров: 10888

Скачиваний: 43

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 5

ЯЗЫКИ УПРАВЛЕНИЯ

И МАНИПУЛИРОВАНИЯ ДАННЫМИ

5.1 Язык SQL

5.1.1 История развития языка

Как отмечалось выше, при работе с БД необходимо осуществлять доступ к дан-

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

• создавать в базе данных объекты с возможностью полно-

ценного описания их структурной составляющей;

• формировать запросы различных уровней сложности на

выборку необходимых данных из таблиц БД;

• формировать запросы к базе данных, с помощью которых

обеспечивается выполнение основных операций по мани-
пулированию данными (вставка, модификация и удаление
данных из таблиц).

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Кроме выделенных функциональных возможностей, язык, предназначенный

для работы с реляционными базами данных, должен позволять обеспечивать их
выполнение с минимальными усилиями со стороны разработчика, при этом син-


background image

5.1 Язык SQL

87

таксис команд этого языка и процесс формирования запросов должны быть доста-
точно просты и доступны для изучения разработчикам разных уровней подготовки.

Также, беря во внимание большое количество СУБД, существующих на рын-

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

В процессе эволюции СУБД наибольшее распространение получили два языка

управления и манипулирования данными:

• язык структурированных запросов SQL (Structured Query Language), со-

зданный фирмой IBM в начале 70-х годов XX века. В первоначальном вари-
анте язык получил название SEQUEL (Structured English Query Language)
и был разработан для созданной фирмой IBM СУБД System/R. Позднее
язык получил свое современное название — SQL;

• запрос по образцу QBE (Query-by-Example), созданный фирмой IBM в Йорк-

таун-Хейтсе.

Наибольшее распространение в процессе эволюции СУБД получил язык SQL,

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

Первыми СУБД, поддерживающими SQL, стали СУБД Oracle V2 в 1979 го-

ду от компании Relational Software Inc. (впоследствии ставшей компанией Oracle)
и System/38 от IBM, основанная на базе СУБД System/R.

Помимо операторов формулирования запросов к базе данных и возможностей

манипулирования данными, язык SQL содержит большое количество функцио-
нальных средств, например:

• средства определения схемы БД и манипулирования схемой;

• операторы для определения ограничений целостности и триггеров;

• средства определения представлений БД;

• средства авторизации доступа к отношениям и их полям;

• средства управления транзакциями.

5.1.2 Стандарты языка SQL

С течением времени выявилась основная проблема использования языка SQL —

у разных производителей СУБД используются разные диалекты SQL, часто между
собой несовместимые. Так, запрос на выборку, созданный и прекрасно выполняю-
щийся в СУБД MS Access, может выдать ошибки и не запускаться в СУБД Oracle,
и наоборот.

Фактически, различные СУБД предоставляют возможность выполнения про-

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


background image

88

Глава 5. Языки управления и манипулирования данными

первый официальный стандарт языка SQL был принят ANSI (American National
Standards Institute
) в 1986 году и ISO (Международной организацией по стандар-
тизации) в 1987 году (названный SQL-86).

До 1996 года вопросами соответствия диалектов SQL в конкретных СУБД офи-

циальному стандарту занимался в основном Национальный институт стандартов
и технологий (NIST). Начиная со стандарта SQL-92, ANSI и NIST определили че-
тыре уровня соответствия конкретной реализации SQL этому стандарту:

• Entry (базовый);

• Transitional (переходный) — проверку на соответствие этому уровню про-

водил только институт NIST;

• Intermediate (промежуточный);

• Full (полный).

Любая компания-разработчик СУБД, в случае, если в этой СУБД поддерживал-

ся синтаксис команд уровня Entry, могла заявлять себя как «SQL-92 compliant» —
соответствующей стандарту SQL-92, хотя на самом деле переносимость и соот-
ветствие стандарту ограничивалось набором возможностей выполнения запросов,
входящих в этот базовый уровень.

С появлением и утверждением стандарта SQL:1999 стандарт языка SQL (ANSI

SQL) приобрел модульную структуру, в которой основная часть стандарта была
вынесена в раздел «SQL/Foundation», а все остальные были выведены в отдельные
модули. В таблице 5.1 представлены основные версии стандартов языка SQL [16].

Таблица 5.1 – Основные версии стандартов SQL

Год

утверждения

Название

Альтернативное

название

Описание изменений

стандарта

1986

SQL-86

SQL-87

Первый вариант стандарта, при-
нятый институтом ANSI и одоб-
ренный ISO в 1987 году

1989

SQL-89

FIPS 127-1

Небольшое изменение, в котором
важным дополнением были огра-
ничения целостности

1992

SQL-92

SQL2, FIPS 127-2 Значительные

изменения

(ISO

9075); уровень Entry Level стан-
дарта SQL-92 принят как стан-
дарт FIPS 127-2

1999

SQL:1999

SQL3

Добавлена поддержка регуляр-
ных выражений, рекурсивных за-
просов (например, транзитивное
замыкание), поддержка тригге-
ров, базовые процедурные рас-
ширения, нескалярные типы дан-
ных и некоторые объектно-ори-

продолжение на следующей странице


background image

5.1 Язык SQL

89

Таблица 5.1 — Продолжение

Год

утверждения

Название

Альтернативное

название

Описание изменений

стандарта

ентированные возможности (на-
пример, структурные типы). Под-
держка

для

встраивания

SQL

в Java, и наоборот

2003

SQL:2003

SQL2003

Введены расширения для работы
с XML-данными, оконные функ-
ции (применяемые для работы
с OLAP-базами данных), генера-
торы последовательностей и ос-
нованные на них типы данных ат-
рибутов таблиц

2006

SQL:2006

SQL2006

Функциональность работы с XML-
данными значительно расширена.
Определены

способы

импорта

и хранения XML-данных в базе
данных SQL. Появилась возмож-
ность

совместно

использовать

в запросах SQL и XQuery (язык
запросов XML)

2008

SQL:2008

SQL2008

Улучшены

возможности

окон-

ных функций, устранены неко-
торые неоднозначности стандар-
та SQL:2003

2011

SQL:2011

Улучшены функции по работе
с временными базами данных

Разнообразие использования различных диалектов процедурного расширения

стандарта языка ANSI SQL (SQL/PSM — SQL/Persistent Stored Modules) в наиболее
известных СУБД представлено в таблице 5.2.

Таблица 5.2 – Основные версии стандартов SQL

СУБД

Сокращенное

наименование

Полное наименование и описание

Interbase/Firebird

PSQL

Procedural SQL

IBM DB2

SQL PL

SQL Procedural Language (реализова-
ны базовые возможности SQL/PSM)

IBM Informix

SPL

Stored Procedural Language

IBM Netezza

NZPLSQL

Основан на Postgres PL/pgSQL

Microsoft/Sybase

T-SQL

Transact-SQL

Mimer SQL

SQL/PSM

SQL/Persistent Stored Module (реализо-
ваны базовые возможности SQL/PSM)

продолжение на следующей странице


background image

90

Глава 5. Языки управления и манипулирования данными

Таблица 5.2 — Продолжение

СУБД

Сокращенное

наименование

Полное наименование и описание

MySQL

SQL/PSM

SQL/Persistent Stored Module (реализо-
ваны базовые возможности SQL/PSM)

NuoDB

SSP

Starkey Stored Procedures

Oracle

PL/SQL

Procedural Language/SQL (основан на
синтаксисе языка Ada)

PostgreSQL

PL/pgSQL

Procedural Language/PostgreSQL (осно-
ван на языке Oracle PL/SQL)

PostgreSQL

PL/PSM

Procedural Language/Persistent Stored
Modules (реализованы базовые воз-
можности SQL/PSM)

Sybase

Watcom-SQL

SQL Anywhere Watcom-SQL Dialect

Teradata

SPL

Stored Procedural Language

SAP

SAP HANA

SQL Script

5.1.3 Описание основных команд SQL

Что касается синтаксиса запросов и предложений, написанных на языке SQL,

то в большинстве работ по описанию команд SQL авторы придерживаются общего
синтаксиса написания SQL-предложений:

1) в описании команд слова, написанные прописными латинскими буквами,

являются зарезервированными словами SQL;

2) фрагменты SQL-предложений, заключенные в фигурные скобки и разде-

ленные символом «|», являются альтернативными. При формировании со-
ответствующей команды для конкретного случая необходимо выбрать одну
из них;

3) фрагмент описываемого SQL-предложения, заключенный в квадратные скоб-

ки [ ], имеет необязательный характер и может не использоваться;

4) многоточие перед закрывающейся скобкой говорит о том, что фрагмент,

указанный в этих скобках, может быть повторен.

На рисунке 5.1 схематично представлен SQL-запрос на выборку данных из

таблицы «Студент».

Мы остановимся на описании основных команд языка SQL в диалекте языка,

используемого в СУБД MS Access (Microsoft Jet SQL), который имеет некоторые
отличия от стандарта ANSI SQL, о которых будет сказано ниже. Однако освоив
создание SQL запросов в одной СУБД, вы без особых усилий сможете применить
свои знания при реализации запросов в других СУБД.

Создание новой таблицы

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Инструкция CREATE TABLE создает новую таблицу и использу-
ется для описания ее полей и индексов.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .