ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 10888
Скачиваний: 43
Глава 5
ЯЗЫКИ УПРАВЛЕНИЯ
И МАНИПУЛИРОВАНИЯ ДАННЫМИ
5.1 Язык SQL
5.1.1 История развития языка
Как отмечалось выше, при работе с БД необходимо осуществлять доступ к дан-
ным и управлять ими. Таким образом, важным требованием к реляционным СУБД
является наличие языка, позволяющего выполнять все необходимые пользователям
операции.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
В процессе эволюции СУБД стало очевидно, что любой язык, ис-
пользуемый для управления данными в реляционной базе дан-
ных, должен предоставлять разработчику и пользователю следу-
ющие основные функциональные возможности:
• создавать в базе данных объекты с возможностью полно-
ценного описания их структурной составляющей;
• формировать запросы различных уровней сложности на
выборку необходимых данных из таблиц БД;
• формировать запросы к базе данных, с помощью которых
обеспечивается выполнение основных операций по мани-
пулированию данными (вставка, модификация и удаление
данных из таблиц).
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Кроме выделенных функциональных возможностей, язык, предназначенный
для работы с реляционными базами данных, должен позволять обеспечивать их
выполнение с минимальными усилиями со стороны разработчика, при этом син-
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. Отметим, что
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
Добавлена поддержка регуляр-
ных выражений, рекурсивных за-
просов (например, транзитивное
замыкание), поддержка тригге-
ров, базовые процедурные рас-
ширения, нескалярные типы дан-
ных и некоторые объектно-ори-
продолжение на следующей странице
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)
продолжение на следующей странице
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 создает новую таблицу и использу-
ется для описания ее полей и индексов.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .