Язык баз данных SQL/
Как уже отмечалось во введении, стандарт языка баз данных SQL/89 стал первым международно принятым стандартом языка SQL. У этого языка имеется масса недостатков: многие важные понятия не определены, много отдано на откуп реализациям и т.д., но тем не менее этот стандарт сыграл свою роль в становлении действительно стандартизованных реляционных систем управления базами данных (и, на самом деле, значимость SQL/89 сохраняется и сегодня, поскольку большинство производителей современных СУБД поддерживает именно этот стандарт). Более того, с появлением стандарта SQL/89 стало реально возможно проектировать, разрабатывать и сопровождать информационные системы, не слишком привязанные к конкретному производителю СУБД. В некотором смысле появление SQL/89 явилось продвижением технологии баз данных в сторону открытых систем (мобильность, интероперабельность и т.д.).
Стандарт имеет следующую структуру:
Раздел 1: "Область применения";
Раздел 2: "Нормативные ссылки" - перечень дополнительных стандартов;
Раздел 3: "Определения, обозначения и соглашения";
Раздел 4: "Понятия" - базовые понятия, используемые при определении языка;
Раздел 5: "Лексические элементы";
Раздел 6: "Скалярные выражения" - определение элементов языка, производящих скалярные значения;
Раздел 7: "Выражения запросов" - определение элементов языка, производящих строки и таблицы данных;
Раздел 8: "Предикаты";
Раздел 9: "Правила присваивания данных" - правила, определяющие порядок выборки данных из базы данных или сохранения данных в базе данных, и правила формирования операций над множествами;
Раздел 10: "Дополнительные общие элементы" - дополнительные общие языковые элементы, используемые в разных частях языка;
Раздел 11: "Определение схемы и манипулирование схемой" - определение средств создания схемы и управления схемой;
Раздел 12: "Модуль" - определение модулей и процедур;
Раздел 13: "Манипулирование данными" - определение операторов манипулирования данными;
Раздел 14: "Управление транзакциями";
Раздел 15: "Управление подключениями";
Раздел 16: "Управление сессиями";
Раздел17: "Динамический SQL" - определение средств, предназначенных для динамического выполнения операторов SQL;
Раздел 18: "Управление диагностикой"
Раздел 19: "Встроенный SQL" - определение синтаксиса встраивания SQL в некоторые стандартные языки программирования;
Раздел 20: "Прямой вызов SQL" - определение подмножества SQL/92, которое может использоваться в режиме прямого вызова;
Раздел21: "Информационная схема и схема определений" - определение представляемых таблиц, содержащих информацию о схеме;
Раздел22: "Коды статуса" - определение значений, идентифицирующих статус завершения SQL-операторов, и механизмов, посредством которых эти значения возвращаются;
Раздел 23: "Соответствие" - определение критериев соответствия языку SQL/92;
Далее следует набор приложений, которые не являются частью стандарта, а предназначены только для информирования пользователей и разработчиков.
Приложение A: "Уровни языка SQL" - перечисление правил, определяющих подмножества вводного SQL (EntrySQL) и промежуточного SQL (IntermediateSQL) стандарта SQL/92;
Приложение B: "Элементы, определяемые в реализации" - перечисление средств, для которых в стандарте установлено, что синтаксис, или смысл, или результат воздействия на базу данных частично или полностью определяется в реализации, и описание определяющей информации, которая должна быть обеспечена в реализации для каждого случая;
Приложение C: "Элементы, зависимые от реализации" - перечисление средств, для которых в стандарте явно установлено, что их смысл или результат воздействия на базу данных зависит от реализации;
Приложение D: "Неодобряемые свойства" - перечисление свойств, которые разработчики стандарта не хотели бы видеть в его следующей версии;
Приложение E: "Несовместимости с SQL/89" - перечисление несовместимостей между SQL/92 и SQL/89;
Приложение F: "Поддержка и интерпретация SQL" - разъясняются интерпретации SQL и коррективы, которые были внесены после принятия SQL/89.
В следующих разделах мы обсудим наиболее важные, с нашей точки зрения, свойства SQL/92. Это не будет полный пересказ стандарта, поскольку, во-первых, он имеет слишком большой объем, а во-вторых, многие важные в практических целях средства не отличаются от средств ранее рассмотренного стандарта SQL/89. Поэтому в основном мы будем говорить о дополнительных средствах SQL/92, отличающих этот стандарт от SQL/89.