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

ISO/IEC 9075

ISO/IEC 9075 — это международный стандарт, определяющий синтаксис и семантику языка SQL (Structured Query Language), используемого для управления реляционными базами данных. Стандарт разрабатывается совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) и регламентирует все аспекты работы с данными: от определения схем и манипуляции данными до управления доступом и обработки транзакций. ISO/IEC 9075 состоит из нескольких частей (parts), каждая из которых посвящена отдельным аспектам языка, и регулярно обновляется с целью расширения функциональности и устранения неоднозначностей.

История

Первая версия стандарта SQL была принята в 1986 году Американским национальным институтом стандартов (ANSI) как ANSI X3.135-1986. В 1987 году аналогичный стандарт был принят ISO как ISO 9075:1987. Этот документ заложил основу для языка, который впоследствии стал доминирующим в области реляционных баз данных. В 1989 году вышла незначительная редакция (SQL-89), исправлявшая неточности и добавлявшая ограничения целостности.

Наиболее значительное обновление произошло в 1992 году с выходом SQL-92 (ISO/IEC 9075:1992). Эта версия ввела множество новых возможностей, включая операторы JOIN, функции агрегации, подзапросы, управление курсорами и поддержку схем (schemas). SQL-92 стал основой для большинства коммерческих СУБД на протяжении последующего десятилетия.

Следующим крупным этапом стал SQL:1999 (ISO/IEC 9075:1999), который добавил поддержку объектно-реляционных расширений, рекурсивных запросов (с помощью оператора WITH), триггеров, хранимых процедур и пользовательских типов данных (UDT). Эта версия также ввела понятие «модулей» для инкапсуляции кода.

SQL:2003 (ISO/IEC 9075:2003) расширил возможности работы с XML, добавил оконные функции (window functions), последовательности (sequences) и столбцы с автоматическим увеличением (IDENTITY). SQL:2006 (ISO/IEC 9075:2006) углубил интеграцию с XML, введя тип данных XML, функции XQuery и возможность хранения и запроса XML-документов напрямую.

SQL:2008 (ISO/IEC 9075:2008) внёс улучшения в работу с ORDER BY, оператором FETCH FIRST (аналог LIMIT), а также добавил поддержку типов данных INSTEAD OF и MERGE. SQL:2011 (ISO/IEC 9075:2011) ввёл поддержку темпоральных данных (temporal data), позволяя хранить и запрашивать данные с учётом времени их действия (например, для систем учёта истории изменений).

SQL:2016 (ISO/IEC 9075:2016) добавил функции для работы с JSON (включая функции JSON_VALUE, JSON_QUERY, JSON_TABLE), поддержку полиморфных табличных функций (polymorphic table functions) и расширенную поддержку регулярных выражений в операторе LIKE. SQL:2019 (ISO/IEC 9075:2019) в основном носил уточняющий характер, исправляя ошибки и добавляя незначительные расширения.

Последняя на момент написания версия — SQL:2023 (ISO/IEC 9075:2023). Она включает поддержку свойств графов (graph properties), позволяя моделировать и запрашивать графовые структуры данных в рамках реляционной модели, а также улучшенную поддержку JSON, включая функции JSON_SCALAR и JSON_SERIALIZE. Также стандарт ввёл новые возможности для работы с массивами и мультимножествами.

Структура стандарта

ISO/IEC 9075 состоит из нескольких частей (parts), каждая из которых имеет собственный номер и название. Основные части:

  • ISO/IEC 9075-1: Framework (SQL/Framework) — определяет общую архитектуру, терминологию и концепции языка SQL. Описывает структуру стандарта, типы данных, операторы и правила синтаксиса.
  • ISO/IEC 9075-2: Foundation (SQL/Foundation) — содержит основное описание языка: синтаксис и семантику операторов DDL (Data Definition Language), DML (Data Manipulation Language), DCL (Data Control Language), а также правила для типов данных, функций, выражений и запросов. Это самая объёмная и важная часть.
  • ISO/IEC 9075-3: Call-Level Interface (SQL/CLI) — определяет интерфейс для взаимодействия прикладных программ с СУБД на уровне вызовов функций (например, ODBC). Описывает функции для подключения, выполнения запросов, получения результатов и управления транзакциями.
  • ISO/IEC 9075-4: Persistent Stored Modules (SQL/PSM) — описывает синтаксис и семантику хранимых процедур, функций и триггеров. Включает конструкции для управления потоком выполнения (IF, LOOP, WHILE), обработки исключений и объявления переменных.
  • ISO/IEC 9075-9: Management of External Data (SQL/MED) — определяет механизмы для работы с внешними источниками данных (например, другими СУБД, файловыми системами, веб-сервисами) через «внешние таблицы» (foreign tables) и «обёртки» (wrappers).
  • ISO/IEC 9075-10: Object Language Bindings (SQL/OLB) — описывает привязку SQL к объектно-ориентированным языкам программирования (например, Java), включая поддержку SQLJ (SQL embedded in Java).
  • ISO/IEC 9075-11: Information and Definition Schemas (SQL/Schemata) — определяет информационные схемы (information schema) и схемы определений (definition schema), которые предоставляют метаданные о структуре базы данных (таблицы, столбцы, индексы, ограничения).
  • ISO/IEC 9075-13: SQL Routines and Types Using the Java Programming Language (SQL/JRT) — описывает возможность вызова Java-методов из SQL и использования Java-классов в качестве пользовательских типов данных.
  • ISO/IEC 9075-14: XML-Related Specifications (SQL/XML) — определяет поддержку XML в SQL, включая тип данных XML, функции для создания, запроса и преобразования XML-документов (с использованием XPath и XQuery).
  • ISO/IEC 9075-15: Multidimensional Arrays (SQL/MDA) — введён в SQL:2023, определяет поддержку многомерных массивов (например, для научных вычислений или обработки изображений).
  • ISO/IEC 9075-16: Property Graph Queries (SQL/PGQ) — введён в SQL:2023, определяет расширения для работы с графами, включая синтаксис для создания графовых представлений и выполнения запросов на обход графа.

Ключевые возможности и классификация

Стандарт ISO/IEC 9075 классифицирует операторы SQL по функциональному назначению:

  • 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.
  • SQL/PSM — операторы для создания хранимых процедур, функций и триггеров: CREATE PROCEDURE, CREATE FUNCTION, CREATE TRIGGER.

Стандарт также определяет несколько уровней соответствия (conformance levels): Entry SQL (базовый), Intermediate SQL (промежуточный) и Full SQL (полный). В последних версиях (начиная с SQL:1999) используется более гибкая система — Core SQL, которая включает обязательные элементы, и дополнительные модули (features), которые производители могут реализовывать по желанию.

Применение и значение

ISO/IEC 9075 является основой для всех современных реляционных систем управления базами данных (РСУБД), таких как PostgreSQL, MySQL, Oracle Database, Microsoft SQL Server, IBM Db2, SQLite и другие. Хотя ни одна из этих систем не реализует стандарт на 100%, все они стремятся к максимальной совместимости с его требованиями. Стандарт обеспечивает переносимость SQL-кода между различными СУБД, что критически важно для разработчиков и администраторов баз данных.

Стандарт также играет ключевую роль в обучении специалистов по базам данных и в разработке инструментов для моделирования данных, генерации кода и анализа производительности. Он служит основой для сертификационных экзаменов (например, Oracle Certified Professional, Microsoft Certified: Azure Data Engineer Associate) и является обязательным для изучения в курсах по базам данных в высших учебных заведениях.

Критика и ограничения

Несмотря на широкое распространение, стандарт ISO/IEC 9075 подвергается критике по нескольким причинам:

  • Сложность и объём — стандарт состоит из множества частей и сотен страниц, что затрудняет его полное понимание и реализацию. Многие производители выбирают реализацию лишь подмножества возможностей.
  • Отсутствие строгой обязательности — стандарт определяет лишь «рекомендуемое» поведение для многих конструкций, оставляя производителям свободу интерпретации. Это приводит к различиям в синтаксисе и семантике между СУБД (например, в обработке NULL, в синтаксисе LIMIT/OFFSET, в поддержке оконных функций).
  • Медленный процесс обновления — новые версии выходят с интервалом в 3–5 лет, что не всегда успевает за развитием технологий (например, поддержка JSON появилась только в SQL:2016, а графов — в SQL:2023).
  • Отсутствие поддержки нереляционных моделей — стандарт ориентирован исключительно на реляционную модель, что ограничивает его применение в NoSQL и NewSQL системах, хотя некоторые из них (например, Couchbase, MongoDB) реализуют подмножество SQL-подобных запросов.

Примеры реализации

  • PostgreSQL — одна из наиболее полных реализаций стандарта, поддерживающая большинство возможностей SQL:2016 и SQL:2023, включая оконные функции, CTE, JSON, XML, темпоральные таблицы и графовые запросы.
  • Oracle Database — поддерживает SQL:2016 на высоком уровне, но имеет множество собственных расширений (например, CONNECT BY для иерархических запросов, PL/SQL для хранимых процедур).
  • Microsoft SQL Server — реализует SQL:2016 с некоторыми отклонениями, особенно в области работы с XML и JSON. Использует T-SQL для хранимых процедур.
  • MySQL — исторически отставал от стандарта, но в версии 8.0 значительно улучшил поддержку SQL:2016, добавив оконные функции, CTE и поддержку JSON.
  • SQLite — реализует подмножество SQL:2016, но не поддерживает многие расширенные возможности (например, хранимые процедуры, триггеры в полном объёме, оконные функции с PARTITION BY).

Источники

  • 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
  • ISO/IEC 9075-3:2023 — Information technology — Database languages — SQL — Part 3: Call-Level Interface
  • ISO/IEC 9075-4:2023 — Information technology — Database languages — SQL — Part 4: Persistent Stored Modules
  • ISO/IEC 9075-11:2023 — Information technology — Database languages — SQL — Part 11: Information and Definition Schemas
  • ISO/IEC 9075-14:2023 — Information technology — Database languages — SQL — Part 14: XML-Related Specifications
  • ISO/IEC 9075-15:2023 — Information technology — Database languages — SQL — Part 15: Multidimensional Arrays
  • ISO/IEC 9075-16:2023 — Information technology — Database languages — SQL — Part 16: Property Graph Queries
  • C. J. Date, «An Introduction to Database Systems», 8th Edition, Addison-Wesley, 2004.
  • Jim Melton, «Understanding the New SQL: A Complete Guide», Morgan Kaufmann, 1993.
  • Документация PostgreSQL 16: Chapter 4. SQL Syntax.
  • Документация Oracle Database 19c: SQL Language Reference.
  • Документация Microsoft SQL Server 2022: Transact-SQL Reference.

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

На главную BFOmetr →