Открыть сервис

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 →