ANSI-92
ANSI-92 (также известный как SQL-92, SQL2) — это стандарт языка структурированных запросов (SQL), принятый Американским национальным институтом стандартов (ANSI) в 1992 году. Он представляет собой вторую редакцию стандарта SQL, заменившую SQL-89 (SQL1), и является одной из наиболее значимых вех в истории реляционных баз данных. Стандарт определил синтаксис, семантику и функциональные возможности языка, которые легли в основу большинства современных систем управления базами данных (СУБД).
История
Разработка SQL началась в 1970-х годах в компании IBM, где был создан прототип языка SEQUEL. В 1986 году ANSI принял первый стандарт SQL, известный как SQL-86, а в 1989 году — его расширенную версию SQL-89. Однако эти ранние стандарты были относительно краткими (около 120 страниц) и оставляли много неопределённостей, что приводило к значительным различиям в реализациях разных производителей. К началу 1990-х годов стало очевидно, что для обеспечения совместимости между СУБД необходим более полный и строгий стандарт.
Работа над ANSI-92 началась в 1989 году под руководством комитета ANSI X3H2. В процессе участвовали представители ведущих производителей СУБД, включая Oracle, IBM, Microsoft, Sybase и Informix. Проект стандарта был опубликован в 1991 году, а окончательная версия утверждена в 1992 году. Документ насчитывал около 600 страниц и содержал детальные спецификации синтаксиса, типов данных, операций и ограничений.
Основные нововведения
ANSI-92 ввёл множество ключевых элементов, которые стали стандартом для последующих версий SQL.
Типы данных
Стандарт определил расширенный набор типов данных:
- Символьные типы:
CHARACTER(n),VARCHAR(n),CHARACTER LARGE OBJECT(CLOB). - Числовые типы:
INTEGER,SMALLINT,NUMERIC(p,s),DECIMAL(p,s),FLOAT(p),REAL,DOUBLE PRECISION. - Дата и время:
DATE,TIME,TIMESTAMP,INTERVAL. - Битовые типы:
BIT(n),BIT VARYING(n).
Операции с таблицами
- Создание и изменение таблиц:
CREATE TABLE,ALTER TABLE,DROP TABLEс поддержкой ограничений (constraints) —PRIMARY KEY,FOREIGN KEY,UNIQUE,CHECK,NOT NULL. - Манипуляция данными:
INSERT,UPDATE,DELETE,SELECTс расширенной поддержкой подзапросов, соединений (JOIN) и агрегатных функций (COUNT,SUM,AVG,MIN,MAX).
Язык управления данными (DCL)
GRANTиREVOKE: управление правами доступа пользователей к объектам базы данных.
Язык управления транзакциями (TCL)
COMMITиROLLBACK: управление транзакциями, обеспечивающее атомарность и согласованность данных.SAVEPOINT: установка точек сохранения внутри транзакции.
Поддержка схем и каталогов
Стандарт ввёл трёхуровневую архитектуру именования объектов: каталог → схема → объект. Каталог — это набор схем, схема — набор объектов (таблиц, представлений, индексов). Это позволило организовать пространства имён в больших базах данных.
Расширенные возможности SELECT
- Соединения (JOIN):
INNER JOIN,LEFT OUTER JOIN,RIGHT OUTER JOIN,FULL OUTER JOIN,CROSS JOIN. - Подзапросы: в
WHERE,HAVING,FROMс использованиемIN,EXISTS,ANY,ALL. - Группировка и сортировка:
GROUP BY,HAVING,ORDER BYс поддержкойNULLS FIRST/LAST. - Агрегатные функции:
SUM,AVG,COUNT,MIN,MAX, а также функции для работы со строками (SUBSTRING,TRIM,UPPER,LOWER) и датами (EXTRACT,CURRENT_DATE,CURRENT_TIME).
Ограничения целостности
- Первичные и внешние ключи:
PRIMARY KEY,FOREIGN KEYс каскадными операциями (ON DELETE CASCADE,ON UPDATE CASCADE). - Проверки:
CHECKдля ограничения значений столбцов. - Уникальность:
UNIQUEдля обеспечения отсутствия дубликатов.
Уровни соответствия
ANSI-92 определил три уровня соответствия для производителей СУБД:
- Entry Level (начальный уровень): минимальный набор функций, обязательный для всех. Включал основные типы данных, простые операции SELECT, INSERT, UPDATE, DELETE, базовые ограничения.
- Intermediate Level (средний уровень): расширенный набор, включающий подзапросы, соединения, агрегатные функции, управление транзакциями.
- Full Level (полный уровень): полная реализация всех возможностей стандарта, включая динамический SQL, поддержку схем и каталогов, а также все типы соединений.
Большинство коммерческих СУБД того времени (Oracle, DB2, SQL Server) реализовали как минимум начальный уровень, а к середине 1990-х годов — средний и полный. Однако ни одна система не достигла 100% соответствия полному уровню из-за сложности и объёма спецификаций.
Влияние на индустрию
ANSI-92 стал основой для развития реляционных баз данных в 1990-х годах. Его принятие привело к:
- Унификации SQL: разработчики могли писать запросы, переносимые между разными СУБД с минимальными изменениями.
- Повышению качества СУБД: производители были вынуждены улучшать совместимость и добавлять отсутствующие функции.
- Развитию инструментов: появились универсальные клиенты и библиотеки (ODBC, JDBC), работающие через стандартный SQL.
- Образованию: стандарт стал основой для учебных курсов по базам данных.
Критика и ограничения
Несмотря на значительный прогресс, ANSI-92 подвергался критике за:
- Чрезмерную сложность: документ был объёмным и трудным для полной реализации.
- Неоднозначности: некоторые конструкции (например, обработка NULL в агрегатных функциях) оставались не до конца определёнными.
- Отсутствие поддержки объектно-ориентированных возможностей: стандарт не учитывал тенденции к объектным базам данных, что привело к появлению SQL:1999.
- Медленное внедрение: многие СУБД (например, MySQL) реализовали полную поддержку ANSI-92 только в начале 2000-х годов.
Наследие
ANSI-92 остаётся базовым стандартом для изучения SQL. Последующие версии (SQL:1999, SQL:2003, SQL:2008, SQL:2011, SQL:2016, SQL:2023) расширяли его, добавляя поддержку рекурсивных запросов, оконных функций, JSON, XML, но фундаментальные конструкции остались неизменными. Большинство современных СУБД (PostgreSQL, MySQL, Oracle Database, Microsoft SQL Server, SQLite) поддерживают ANSI-92 как минимум на среднем уровне.
Источники
- ANSI/ISO/IEC 9075:1992 — Information technology — Database languages — SQL.
- Date, C. J. (1995). An Introduction to Database Systems. Addison-Wesley.
- Melton, J., & Simon, A. R. (1993). Understanding the New SQL: A Complete Guide. Morgan Kaufmann.
- ISO/IEC 9075-1:1999 — Information technology — Database languages — SQL — Part 1: Framework (SQL/Framework).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →