Стандарт SQL:2011¶
SQL:2011 — это версия международного стандарта языка структурированных запросов SQL, принятая Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) в декабре 2011 года. Официальное обозначение — ISO/IEC 9075:2011. Стандарт является эволюционным развитием предыдущей версии SQL:2008 и вводит ряд существенных дополнений, направленных на улучшение работы с временными данными, оконными функциями и расширение возможностей языка.
¶История
Разработка SQL:2011 началась сразу после завершения работы над SQL:2008. Основной целью было устранение давно существовавших пробелов в стандарте, особенно в области поддержки темпоральных (временных) данных. В 2000-х годах многие крупные СУБД, такие как Oracle, IBM DB2 и Teradata, уже имели собственные реализации темпоральных таблиц, однако отсутствие единого стандарта приводило к несовместимости и сложностям при переносе приложений. Рабочая группа ISO/IEC JTC 1/SC 32 (Управление данными и обмен ими) подготовила проект, который был опубликован в декабре 2011 года. Впоследствии стандарт был дополнен поправками (Amendments) в 2013, 2014 и 2016 годах, а затем заменён версией SQL:2016.
¶Основные нововведения
¶Темпоральные данные
Наиболее значимым нововведением SQL:2011 стала стандартизация поддержки темпоральных данных. Стандарт вводит понятие темпоральных таблиц, которые позволяют хранить историю изменений данных и выполнять запросы к состоянию базы данных на любой момент времени. Выделяются два типа темпоральности:
- Время приложения (Application-time period tables) — таблицы, в которых пользователь явно задаёт период действия записи (например, дата начала и окончания действия договора). Для этого используются столбцы с типом данных
PERIOD(например,PERIOD(DATE)). - Время системы (System-versioned tables) — таблицы, в которых СУБД автоматически отслеживает, когда запись была создана или изменена. Система хранит как текущие, так и исторические версии строк, позволяя выполнять запросы к состоянию базы данных на любой момент времени (
AS OF SYSTEM TIME).
Стандарт определяет ключевые слова FOR SYSTEM_TIME и AS OF для запросов к историческим данным. Например, запрос SELECT * FROM employees AS OF SYSTEM TIME '2015-01-01' возвращает состояние таблицы на 1 января 2015 года.
¶Улучшения оконных функций
SQL:2011 расширил возможности оконных функций (OLAP-функций), введённых в SQL:2003. Были добавлены:
- Фильтрация оконных фреймов — возможность указывать условие
EXCLUDEдля исключения из окна текущей строки, её группы или других элементов. Например,ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE CURRENT ROW. - Поддержка
GROUPS— новый тип оконного фрейма, который группирует строки по значениям столбца сортировки, а не по физическому смещению. Это позволяет выполнять более гибкие вычисления, например, скользящие суммы по группам равных значений. - Расширенные агрегатные функции — уточнена семантика функций
RANK,DENSE_RANK,NTILEи других.
¶Поддержка последовательностей (Sequences)
Стандарт SQL:2011 впервые включил полноценную поддержку генераторов последовательностей (sequences) — объектов, автоматически генерирующих уникальные числовые значения. Ранее эта функциональность была реализована в большинстве СУБД проприетарно (например, SEQUENCE в Oracle, SERIAL в PostgreSQL). Стандарт определил синтаксис CREATE SEQUENCE, ALTER SEQUENCE и NEXT VALUE FOR, а также правила кэширования и транзакционной изоляции.
¶Другие изменения
- Расширенная поддержка типов данных — уточнена работа с типами
XML,JSON(в поправках 2013–2016 годов), а также с большими объектами (BLOB, CLOB). - Улучшения в DDL — добавлена возможность создания таблиц с использованием
CREATE TABLE ... AS(CTAS) в стандартном синтаксисе, а также поддержкаIF NOT EXISTSиIF EXISTS(хотя последние были формализованы позже). - Новые функции для работы со строками — функции
TRIM,SUBSTRING,CONCATполучили уточнённую семантику, добавлена поддержка регулярных выражений (черезSIMILAR TOиLIKE_REGEX). - Поддержка циклических ссылок в рекурсивных запросах — уточнена работа с
WITH RECURSIVEдля предотвращения бесконечных циклов.
¶Влияние на рынок СУБД
SQL:2011 оказал значительное влияние на развитие коммерческих и открытых систем управления базами данных. Крупные вендоры, такие как Oracle, IBM DB2, Microsoft SQL Server и PostgreSQL, начали внедрять темпоральные таблицы в своих продуктах в течение нескольких лет после публикации стандарта.
- Oracle — реализовала темпоральные таблицы в версии 12c (2013 год), включив поддержку как времени приложения, так и времени системы.
- IBM DB2 — поддерживала темпоральные таблицы с версии 10 (2012 год), частично опережая стандарт.
- PostgreSQL — добавила поддержку системно-версионируемых таблиц в версии 10 (2017 год), а также предоставляет расширение
pg_temporalдля полной реализации стандарта. - Microsoft SQL Server — ввёл темпоральные таблицы в версии 2016 года, с поддержкой
SYSTEM_VERSIONING. - MySQL — реализовал системно-версионируемые таблицы в версии 8.0 (2018 год), но с некоторыми отступлениями от стандарта.
¶Критика и ограничения
Несмотря на прогресс, SQL:2011 подвергался критике за недостаточную проработанность некоторых аспектов. В частности:
- Сложность синтаксиса — темпоральные запросы требуют громоздких конструкций, что затрудняет их использование в простых приложениях.
- Отсутствие поддержки встроенных типов
PERIOD— стандарт определяет период как два столбца с типомDATEилиTIMESTAMP, но не вводит отдельный тип данных, что приводит к дублированию кода. - Неполная реализация в СУБД — многие вендоры реализовали стандарт выборочно, опуская некоторые функции (например,
EXCLUDEв оконных фреймах илиGROUPS). - Проблемы с производительностью — системно-версионируемые таблицы требуют дополнительного хранения исторических данных, что может приводить к увеличению объёмов хранилищ и замедлению операций вставки/обновления.
¶Значение
SQL:2011 стал важным шагом в эволюции языка SQL, впервые стандартизировав поддержку темпоральных данных — одну из наиболее востребованных функций в корпоративных приложениях, таких как бухгалтерский учёт, управление персоналом и финансовый анализ. Введение последовательностей и улучшение оконных функций повысило выразительность языка и сократило необходимость в использовании проприетарных расширений. Стандарт заложил основу для последующей версии SQL:2016, которая включила поддержку JSON, полиформных таблиц и другие нововведения.
¶Источники
- ISO/IEC 9075:2011 — Information technology — Database languages — SQL.
- Melton, J. (2012). SQL:2011 — The New Standard for Temporal Data. ACM SIGMOD Record.
- International Organization for Standardization (ISO). SQL:2011 Overview.
- Документация Oracle Database 12c, IBM DB2 10, PostgreSQL 10, Microsoft SQL Server 2016.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


