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

SQL-92

SQL-92 (также известный как SQL2) — это третья версия стандарта языка структурированных запросов (SQL), принятая в 1992 году. Он является одной из наиболее значимых и широко внедрённых ревизий стандарта, заложившей основу для современного реляционного управления базами данных. SQL-92 определил синтаксис и семантику языка, обеспечив значительно более высокий уровень переносимости кода между различными системами управления базами данных (СУБД) по сравнению с предыдущими версиями.

История

Стандарт SQL был впервые принят Американским национальным институтом стандартов (ANSI) в 1986 году (SQL-86), а затем — Международной организацией по стандартизации (ISO) в 1987 году. Первая ревизия, SQL-89, была незначительным обновлением. Однако к началу 1990-х годов стало очевидно, что для обеспечения реальной совместимости и расширения функциональности требуется фундаментальная переработка.

Работа над SQL-92 (официальное обозначение — ISO/IEC 9075:1992) велась подкомитетом ISO/IEC JTC 1/SC 32. Стандарт был опубликован в 1992 году. Его ключевой целью было устранение неоднозначностей и пробелов, которые производители СУБД (такие как Oracle, IBM, Microsoft) трактовали по-своему, что приводило к фрагментации языка. SQL-92 стал первым стандартом, который ввёл чёткую трёхуровневую классификацию соответствия.

Классификация соответствия (Уровни SQL-92)

Для упрощения внедрения производителями, SQL-92 определил три уровня соответствия. СУБД могла претендовать на поддержку стандарта, реализовав хотя бы начальный уровень. Это стимулировало постепенную миграцию от проприетарных расширений к стандартному языку.

  • Начальный уровень (Entry Level): Представляет собой строгое подмножество SQL-89. Он охватывает базовые операции: простые запросы SELECT, вставку (INSERT), обновление (UPDATE), удаление (DELETE), создание таблиц (CREATE TABLE) и простые соединения (JOIN). Большинство коммерческих СУБД того времени (например, Oracle 7, IBM DB2, Microsoft SQL Server 4.2) быстро достигли этого уровня.
  • Промежуточный уровень (Intermediate Level): Включает все возможности начального уровня плюс значительное количество новых функций. Среди них: динамический SQL, управление курсорами с помощью FETCH, DECLARE CURSOR, поддержка схем (SCHEMA), ограничения целостности (CHECK, UNIQUE, FOREIGN KEY), а также операции над множествами (UNION, INTERSECT, EXCEPT). Этот уровень стал де-факто стандартом для серьёзных приложений.
  • Полный уровень (Full Level): Включает все возможности промежуточного уровня и добавляет наиболее сложные конструкции: вложенные запросы с корреляцией (correlated subqueries), рекурсивные запросы (хотя полноценная рекурсия была стандартизирована позже), триггеры (в зачаточном виде), домены (DOMAIN), а также полную поддержку соединений (NATURAL JOIN, CROSS JOIN, OUTER JOIN с полным синтаксисом). Полный уровень был реализован лишь немногими СУБД того времени, так как требовал глубокой переработки ядра.

Основные нововведения и характеристики

SQL-92 ввёл множество конструкций, которые стали стандартом на десятилетия.

Типы данных

Стандарт впервые чётко определил и расширил набор встроенных типов данных:

  • Символьные: CHARACTER(n), CHARACTER VARYING(n) (или VARCHAR), CHARACTER LARGE OBJECT (CLOB).
  • Числовые: INTEGER, SMALLINT, NUMERIC(p,s), DECIMAL(p,s), FLOAT(p), REAL, DOUBLE PRECISION.
  • Дата и время: DATE, TIME(p), TIMESTAMP(p), а также типы INTERVAL для работы с интервалами времени.
  • Битовые: BIT(n), BIT VARYING(n).

Манипуляция данными (DML)

  • Соединения (JOIN): SQL-92 ввёл синтаксис явного соединения, который стал обязательным. Ключевые слова INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, CROSS JOIN и NATURAL JOIN позволили писать более читаемые и надёжные запросы по сравнению с неявным синтаксисом FROM t1, t2 WHERE t1.id = t2.id.
  • Операции над множествами: Стандартизированы операторы UNION (объединение), INTERSECT (пересечение) и EXCEPT (разность), а также их модификаторы ALL (для сохранения дубликатов).
  • Вложенные запросы: Расширена поддержка подзапросов в предложениях WHERE, HAVING и FROM. Введены предикаты IN, ANY, ALL, SOME, EXISTS.
  • Условная логика: Введено выражение CASE, позволяющее реализовывать условную логику внутри запроса (например, CASE WHEN condition THEN result ELSE default END).

Определение данных (DDL)

  • Схемы (SCHEMA): Введена концепция схемы как логического контейнера для объектов базы данных (таблиц, представлений, индексов). Это улучшило организацию и управление правами доступа.
  • Ограничения целостности (Constraints): Стандарт детально описал ограничения: PRIMARY KEY, FOREIGN KEY (с каскадными действиями ON DELETE CASCADE, ON UPDATE SET NULL), UNIQUE, CHECK, NOT NULL.
  • Домены (DOMAIN): Позволяли определить пользовательский тип данных с заданными ограничениями и значением по умолчанию, который затем можно было использовать в нескольких таблицах.
  • Представления (VIEW): Определена полная поддержка представлений, включая представления с проверкой (WITH CHECK OPTION).

Управление данными (DCL)

  • Транзакции: Стандартизированы операторы COMMIT и ROLLBACK для управления транзакциями. Определены уровни изоляции транзакций (хотя их полная спецификация была дана позже).
  • Права доступа: Операторы GRANT и REVOKE для управления привилегиями пользователей (SELECT, INSERT, UPDATE, DELETE, REFERENCES, USAGE).

Другие важные аспекты

  • Динамический SQL: Введены конструкции EXECUTE IMMEDIATE и PREPARE/EXECUTE для выполнения SQL-запросов, сформированных во время выполнения программы.
  • Курсоры: Полностью определён механизм курсоров для построчной обработки результатов запроса, включая чувствительность к изменениям (INSENSITIVE, SCROLL).

Влияние и критика

SQL-92 оказал колоссальное влияние на индустрию баз данных. Он стал тем стандартом, на который ориентировались все крупные производители СУБД. Благодаря ему разработчики получили возможность писать код, который с минимальными изменениями работал на Oracle, DB2, Sybase, Informix и Microsoft SQL Server. Это значительно снизило стоимость разработки и миграции приложений.

Однако стандарт не был лишён недостатков.

  • Сложность полного внедрения: Полный уровень SQL-92 был настолько объёмным и сложным, что ни одна СУБД того времени не реализовала его полностью. Даже промежуточный уровень часто внедрялся с оговорками.
  • Пробелы в функциональности: SQL-92 не включал поддержку многих важных возможностей, которые стали критически важными позже: рекурсивные запросы (стандартизированы в SQL:1999), триггеры (лишь в зачаточном виде), хранимые процедуры (стандартизированы в SQL:1999), полнотекстовый поиск, аналитические функции (оконные функции).
  • Неоднозначности: Несмотря на значительные усилия, некоторые конструкции (например, поведение с NULL-значениями в определённых контекстах) оставались предметом различных интерпретаций.

Наследие

SQL-92 оставался действующим стандартом до выхода SQL:1999 (SQL3) и заложил основу для всех последующих версий. Большинство современных СУБД (PostgreSQL, MySQL, MariaDB, Oracle, Microsoft SQL Server) в значительной степени поддерживают синтаксис и семантику SQL-92, особенно на начальном и промежуточном уровнях. Изучение SQL-92 до сих пор является обязательной частью образования в области баз данных, так как он представляет собой чётко определённое и стабильное ядро языка, которое остаётся актуальным спустя три десятилетия.

Источники

  1. ISO/IEC 9075:1992, Information technology — Database languages — SQL.
  2. Melton, J., & Simon, A. R. (1993). Understanding the New SQL: A Complete Guide. Morgan Kaufmann.
  3. Date, C. J. (2003). An Introduction to Database Systems (8th ed.). Addison-Wesley.
  4. Когаловский, М. Р. (2002). Энциклопедия технологий баз данных. Финансы и статистика.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →