Cтандарты SQL86, SQL89, SQL92
Системы управления базами данных (СУБД) нуждаются в отдельном языке манипулирования данными, потому что процедурные языки не имеют необходимых для этой цели операторов. Первоначальная версия такого языка была предложена компанией IBM для реляционной СУБД «IBM System R». Языку дали название SEQUEL (Structured English QUEry Language) – структурированный английский язык запросов. Чуть позднее язык был переименован в SQL. Целью создания языка было обеспечить пользователей, не имеющих навыков программирования, простым и понятным средством манипулирования данными.
В 1986 году организации ISO и ANSI начали разработку стандарта языка SQL с целью его унификации для использования различными СУБД. Стандарт 1986 года определил минимальный синтаксис языка. В 1989 году он был обновлен и появился стандарт SQL89. Этот стандарт включил в себя определение всех основных функций SQL таких как:
- Операторы определения таблиц;
- Операторы выборки;
- Раздел WHERE;
- Предикаты;
- Разделы GROUP BY и HAVING;
- Групповые операции;
- Ограничения целостности данных;
- Определение привилегий пользователей.
В 1992 году стандарт был снова существенно расширен и стал называться SQL92. Он включал три уровня соответствия: базовый, средний и полный. В базовый уровень в сравнении с SQL89 добавились следующие свойства:
- Возможность создавать представления;
- Оператор DROP;
- Отложенные транзакции;
- Расширены возможности ограничений внешнего ключа;
- Разновидности оператора JOIN;
- Оператор UNION;
- Возможность встраивать SQL в динамические языки программирования.
Стандарт SQL 99
На современном этапе фактическим стандартом является SQL99 принятый в 1999 году. Стандарт определяет несколько уровней соответствия. Обязательным для современных СУБД является уровень функционального ядра. Соответствия этому уровню достаточно для того, чтобы утверждать, что СУБД соответствует стандарту SQL99. Но большинство профессиональных СУБД поддерживают также уровни расширенного соответствия.
Функциональное ядро включает в себя базовый уровень стандарта SQL92 и следующие дополнительные возможности:
- Поддержку работы с большими объектами (типы BLOB и CLOB);
- Вызов внешних программ на других языках из SQL;
- Типы данных определенные пользователем (Оператор CREATE TYPE);
Другие уровни расширенного соответствия предполагают следующие возможности:
- Уровень работы с датой и временем позволяет работать с типами DATATIME и INTERVAL с возможностью смещения зонального времени.
- Уровень управления целостностью позволяет использовать подзапросы в ограничениях целостности.
- Уровень активных баз данных определяет возможность создания процедур, которые автоматически запускаются при выполнении операторов INSERT, DELETE или UPDATE. Такие процедуры называются триггерами.
- Уровень OLAP позволяет строить запросы на основе пересечения множеств результатов нескольких запросов (раздел INTERSECT), использовать полное внешнее соединение (FULL OUTER JOIN).
- Уровень PSM-модулей добавляет в язык операторы CASE, IF, WHILE, REPEAT, LOOP, FOR. Также на этом уровне вводятся операторы создания хранимых процедур и функций (CREATE PROCEDURE, CREATE FUNCTION).
- Уровень CLI-интерфейса добавляет возможность создания интерфейсов вызова операторов SQL. Именно таким интерфейсом является драйвер ODBC.
- Базовый уровень поддержки объектов обеспечивает создание объектов путем определения типов данных и внешних процедур.
- Расширенный уровень поддержки объектов обеспечивает множественное наследование для типов данных.
Стандарты обмена данными
Фактическим стандартом обмена данными между различными СУБД на сегодняшний день является язык XML (Extensible Markup Language) предложенный и стандартизированный консорциумом W3C. Большинство современных СУБД имеют в составе функции преобразования данных, полученных в результате запросов, в xml-файлы, а также функции обратного преобразования xml-файлов в таблицы.
Пример xml-файла показан на рисунке.
Также разработан стандарт SQL/XML, который позволяет использовать в SQL-запросах данные XML-файлов наряду с данными, хранящимися в таблицах.