SQL-стандарт
SQL-стандарт — это совокупность официальных спецификаций, определяющих синтаксис и семантику языка структурированных запросов (Structured Query Language), используемого для управления реляционными базами данных. Стандарт устанавливает единые требования к функциональным возможностям языка, включая операции определения данных (DDL), манипулирования данными (DML), управления доступом (DCL) и управления транзакциями (TCL). Основной целью стандартизации является обеспечение переносимости программного кода между различными системами управления базами данных (СУБД) и совместимости приложений.
История развития
Ранние этапы и SQL-86
Первые работы по стандартизации SQL начались в конце 1970-х годов, после того как компания IBM разработала язык SEQUEL (Structured English Query Language) для своей реляционной СУБД System R. В 1982 году Американский национальный институт стандартов (ANSI) поручил комитету X3H2 (позднее — INCITS H2) разработать официальный стандарт. Результатом стал стандарт SQL-86 (ANSI X3.135-1986), опубликованный в 1986 году. Он определял базовый набор операторов, включая SELECT, INSERT, UPDATE, DELETE, CREATE TABLE и CREATE INDEX. В 1987 году этот стандарт был принят Международной организацией по стандартизации (ISO) как ISO 9075-1987.
SQL-89 и SQL-92
В 1989 году вышла незначительно обновлённая версия SQL-89 (ANSI X3.135-1989), которая добавила поддержку целостности данных (ограничения CHECK, FOREIGN KEY) и расширила возможности языка определения данных. Однако настоящим прорывом стал стандарт SQL-92 (ISO/IEC 9075:1992), опубликованный в 1992 году. Он значительно расширил функциональность языка, введя:
- поддержку соединений (
JOIN) в явном виде (INNER JOIN,LEFT JOIN,RIGHT JOIN); - операции с наборами (
UNION,INTERSECT,EXCEPT); - вложенные запросы (
subqueries); - операторы манипулирования схемой (
ALTER TABLE,DROP TABLE); - типы данных
DATE,TIME,TIMESTAMP,INTERVAL; - управление транзакциями (
COMMIT,ROLLBACK,SAVEPOINT).
SQL-92 стал первым стандартом, получившим широкое признание среди разработчиков СУБД, и до сих пор служит базой для многих реализаций.
SQL:1999 и SQL:2003
Стандарт SQL:1999 (ISO/IEC 9075:1999) ввёл фундаментальные изменения, включая:
- объектно-реляционные расширения (поддержка пользовательских типов данных, наследования таблиц, методов);
- рекурсивные запросы (
WITH RECURSIVE); - триггеры (
CREATE TRIGGER); - оконные функции (
OVER,PARTITION BY); - поддержку регулярных выражений в операторах
LIKEиSIMILAR TO.
SQL:2003 (ISO/IEC 9075:2003) добавил:
- XML-расширения (функции
XMLPARSE,XMLSERIALIZE,XMLEXISTS); - последовательности (
CREATE SEQUENCE); - генерацию идентификаторов (
IDENTITYcolumns); - оператор
MERGE(upsert).
SQL:2008, SQL:2011 и SQL:2016
Версия SQL:2008 (ISO/IEC 9075:2008) уточнила синтаксис, ввела ORDER BY в окнах, FETCH FIRST для ограничения строк и INSTEAD OF триггеры. SQL:2011 (ISO/IEC 9075:2011) добавил поддержку временных таблиц (PERIOD FOR SYSTEM_TIME) и операторов для работы с историческими данными (AS OF SYSTEM TIME). SQL:2016 (ISO/IEC 9075:2016) внёс:
- JSON-функции (
JSON_VALUE,JSON_QUERY,JSON_TABLE); - поддержку полиморфных табличных функций;
- улучшения в работе с массивами и мультимножествами.
SQL:2019 и SQL:2023
Стандарт SQL:2019 (ISO/IEC 9075:2019) был в основном корректирующим, исправляющим ошибки и уточняющим формулировки. SQL:2023 (ISO/IEC 9075:2023) — последняя на данный момент версия — добавила:
- расширенную поддержку JSON (операции
JSON_EXISTS,JSON_EQUAL, агрегатные функцииJSON_OBJECTAGG,JSON_ARRAYAGG); - функции для работы с графическими данными (свойства
GRAPHиPATH); - улучшения в области безопасности (роли
ADMIN,SET ROLE); - поддержку новых типов данных, включая
MULTISETиARRAYс улучшенной функциональностью.
Структура стандарта
Стандарт SQL состоит из нескольких частей, каждая из которых описывает отдельный аспект языка:
- ISO/IEC 9075-1 — «Framework» (общая архитектура и терминология);
- ISO/IEC 9075-2 — «Foundation» (основной синтаксис и семантика SQL);
- ISO/IEC 9075-3 — «Call-Level Interface» (интерфейс вызова SQL из прикладных программ, CLI);
- ISO/IEC 9075-4 — «Persistent Stored Modules» (хранимые процедуры и функции, PSM);
- ISO/IEC 9075-9 — «Management of External Data» (управление внешними данными, MED);
- ISO/IEC 9075-10 — «Object Language Bindings» (привязка к объектно-ориентированным языкам);
- ISO/IEC 9075-11 — «Information and Definition Schemas» (схемы метаданных);
- ISO/IEC 9075-13 — «SQL Routines and Types Using the Java Programming Language» (SQL-процедуры и типы на Java);
- ISO/IEC 9075-14 — «XML-Related Specifications» (XML-расширения);
- ISO/IEC 9075-15 — «Multi-dimensional Arrays» (многомерные массивы, добавлено в SQL:2023);
- ISO/IEC 9075-16 — «Property Graph Queries» (запросы к графам свойств, добавлено в SQL:2023).
Уровни соответствия
Стандарт определяет три уровня соответствия для реализации СУБД:
- Entry Level (начальный уровень) — минимальный набор функций, соответствующих SQL-92. Требует поддержки основных операторов DDL и DML, но не включает сложные конструкции (например,
FULL OUTER JOINилиUNION). - Intermediate Level (промежуточный уровень) — расширенный набор, включающий большинство функций SQL-92, за исключением некоторых продвинутых (например, рекурсивных запросов).
- Full Level (полный уровень) — полная реализация всех функций, определённых в стандарте.
На практике большинство современных СУБД (PostgreSQL, Oracle Database, Microsoft SQL Server, MySQL, IBM Db2) реализуют уровень, близкий к Intermediate или Full, но с собственными расширениями и отклонениями.
Ключевые компоненты языка
DDL (Data Definition Language)
Операторы для создания и изменения структуры базы данных: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, CREATE VIEW, CREATE SCHEMA.
DML (Data Manipulation Language)
Операторы для работы с данными: SELECT, INSERT, UPDATE, DELETE, MERGE.
DCL (Data Control Language)
Операторы управления доступом: GRANT, REVOKE, DENY.
TCL (Transaction Control Language)
Операторы управления транзакциями: BEGIN TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT.
Реализация в СУБД
Несмотря на наличие стандарта, ни одна СУБД не реализует его полностью. Каждый производитель добавляет собственные расширения и диалекты, что приводит к несовместимости кода. Например:
- PostgreSQL — наиболее близок к стандарту, поддерживает рекурсивные запросы, оконные функции, JSON-функции, но имеет собственные типы данных (например,
UUID,HSTORE). - Oracle Database — использует собственный диалект PL/SQL, поддерживает
CONNECT BYдля иерархических запросов (отличается от стандартногоWITH RECURSIVE). - Microsoft SQL Server — использует T-SQL, поддерживает
TOPвместоFETCH FIRST, имеет собственные функции (GETDATE(),NEWID()). - MySQL — исторически отставал от стандарта, но с версии 8.0 поддерживает оконные функции и рекурсивные запросы; использует
LIMITвместоFETCH FIRST. - IBM Db2 — один из первых коммерческих продуктов, поддерживающих стандарт SQL-92; использует собственный диалект SQL PL.
Критика и ограничения
Основные недостатки SQL-стандарта включают:
- Запаздывание — новые версии выходят с интервалом в 3–5 лет, что не успевает за развитием технологий (например, поддержка JSON появилась только в 2016 году, хотя JSON-базы данных существовали с 2000-х).
- Сложность — стандарт насчитывает более 2000 страниц, что затрудняет его полную реализацию.
- Неоднозначность — некоторые конструкции (например, порядок выполнения
JOINиWHERE) оставлены на усмотрение разработчиков СУБД, что приводит к различиям в поведении. - Отсутствие строгой сертификации — не существует обязательной процедуры проверки СУБД на соответствие стандарту, поэтому производители часто заявляют о поддержке «частично» или «с расширениями».
Значение
SQL-стандарт играет ключевую роль в индустрии баз данных, обеспечивая:
- переносимость приложений между различными СУБД;
- единый язык обучения и разработки;
- основу для создания новых технологий (например, Apache Spark SQL, Google BigQuery);
- базу для международных и национальных нормативных документов (в России — ГОСТ Р ИСО/МЭК 9075).
Источники
- ISO/IEC 9075-1:2023 — Information technology — Database languages — SQL — Part 1: Framework.
- ISO/IEC 9075-2:2023 — Information technology — Database languages — SQL — Part 2: Foundation.
- C. J. Date, Hugh Darwen. «A Guide to the SQL Standard». Addison-Wesley, 1997.
- Jim Melton, Alan R. Simon. «SQL:1999 — Understanding Relational Language Components». Morgan Kaufmann, 2001.
- Документация PostgreSQL 16 — «SQL Language».
- Документация Oracle Database 23c — «SQL Language Reference».
- Документация Microsoft SQL Server 2022 — «Transact-SQL Reference».
- Документация MySQL 8.0 — «SQL Syntax».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →