Парадигма | Декларативный |
---|---|
Семейство | Язык запросов |
Разработал | Дональд Д. Чемберлин. Раймонд Ф. Бойс |
Разработчик | ISO / IEC |
Впервые появился | 1974; 46 лет назад (1974 г.) |
Стабильный выпуск | SQL: 2016 / декабрь 2016 г.; 3 года назад (2016-12) |
Дисциплина печати | Статический, сильный |
OS | Кросс-платформенный |
Веб-сайт | www.iso.org / standard / 63555.html |
Основные реализации | |
Многие | |
диалекты | |
Под влиянием | |
Даталог | |
Под влиянием | |
CQL, LINQ, SPARQL, SOQL, PowerShell, JPQL, jOOQ, N1QL | |
|
Расширение имени файла | .sql |
---|---|
Тип интернет-носителя | application / sql |
Разработано | ISO / IEC |
Первый выпуск | 1986 (1986) |
Тип формата | База данных |
Стандарт | ISO / IEC 9075 |
Открытый формат ? | Да |
Веб-сайт | www.iso.org / standard / 63555.html |
SQL (( слушайте ) SQL, "продолжение"; язык структурированных запросов ) - это предметно-ориентированный язык, используемый в программировании и предназначенный для управления данными, хранящимися в системе управления реляционными базами данных (RDBMS), или для потоковой обработка в системе управления реляционными потоками данных (RDSMS). Это особенно полезно при обработке структурированных данных, то есть данных, включающих отношения между сущностями и переменными.
SQL предлагает два основных преимущества по сравнению с более старыми API чтения-записи , такими как ISAM или VSAM. Во-первых, он представил концепцию доступа к множеству записей с помощью одной единственной команды. Во-вторых, это избавляет от необходимости указывать, как достичь записи, например с индексом или без него.
Первоначально основанный на реляционной алгебре и кортежном реляционном исчислении, SQL состоит из множества типов операторов, которые можно неофициально классифицировать как подъязыки, обычно: язык запросов данных (DQL), язык определения данных (DDL), язык управления данными (DCL) и язык управления данными (DML). Объем SQL включает запрос данных, манипулирование данными (вставка, обновление и удаление), определение данных (создание и изменение схемы ) и управление доступом к данным. Хотя SQL по сути является декларативным языком (4GL ), он также включает в себя процедурные элементы.
SQL был одним из первых коммерческих языков, в которых использовалась реляционная модель Эдгара Ф. Кодда . Модель была описана в его влиятельной статье 1970 года «Реляционная модель данных для больших общих банков данных». Несмотря на то, что он не полностью придерживался реляционной модели, описанной Коддом, он стал наиболее широко используемым языком баз данных.
SQL стал стандартом американской Национальный институт стандартов (ANSI) в 1986 году и Международной организации по стандартизации (ISO) в 1987 году. С тех пор стандарт был пересмотрен, чтобы включить более широкий набор функций. Несмотря на наличие стандартов, большая часть кода SQL требует по крайней мере некоторых изменений перед переносом в другие системы баз данных.
Изначально SQL был разработан в IBM от Дональда Д. Чемберлина и Рэймонда Ф. Бойса после изучения реляционной модели от Эдгара Ф. Кодда в начале 1970-х.. Эта версия, первоначально называвшаяся SEQUEL (Structured English Query Language), была разработана для манипулирования и извлечения данных, хранящихся в исходной квазиреляционной системе управления базами данных IBM, которая была создана IBM, группа в Исследовательской лаборатории IBM в Сан-Хосе была разработана в 1970-х годах.
Первой попыткой Чемберлина и Бойса создать язык реляционных баз данных был Square, но его было трудно использовать из-за обозначения индекса. После перехода в исследовательскую лабораторию Сан-Хосе в 1973 году они начали работу над SEQUEL. Акроним SEQUEL позже был изменен на SQL, потому что SEQUEL был товарным знаком компании Великобритании Hawker Siddeley Dynamics Engineering Limited.
После тестирования SQL на тестовых сайтах заказчиков для определения полезности и практичности системы IBM приступила к разработке коммерческих продуктов на основе своего прототипа System R, включая System / 38, SQL / DS, и DB2, которые были коммерчески доступны в 1979, 1981 и 1983 годах соответственно.
В конце 1970-х годов Relational Software, Inc. (сейчас Oracle Corporation ) увидели потенциал концепций, описанных Коддом, Чемберлином и Бойсом, и разработали свою собственную РСУБД на основе SQL и надеялись продать ее США. ВМС, Центральное разведывательное управление и другие США государственные агентства. В июне 1979 года компания Relational Software, Inc. представила первую коммерчески доступную реализацию SQL, Oracle V2 (Version2) для компьютеров VAX.
К 1986 году стандартные группы ANSI и ISO официально приняли стандартное определение языка "Database Language SQL". Новые версии стандарта были опубликованы в 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 и, в последний раз, в 2016 году.
Язык SQL подразделяется на несколько языковых элементов, включая:
SQL разработан для конкретной цели: запрашивать данные, содержащиеся в реляционной базе данных. SQL - это основанный на наборе, декларативный язык программирования, а не императивный язык программирования, такой как C или BASIC. Однако расширения к стандартному SQL добавляют функции процедурного языка программирования, такие как конструкции управления потоком. К ним относятся:
Источник | Аббревиатура | Полное имя |
---|---|---|
Стандарт ANSI / ISO | SQL / PSM | Модули SQL / Persistent Stored |
Interbase / Firebird | PSQL | процедурный SQL |
IBM DB2 | SQL PL | процедурный язык SQL (реализует SQL / PSM) |
IBM Informix | SPL | Сохраненный процедурный язык |
IBM Netezza | NZPLSQL | (на основе Postgres PL / pgSQL) |
Invantive | PSQL | Invantive Procedural SQL (реализует SQL / PSM и PL / SQL ) |
MariaDB | SQL / PSM, PL / SQL | SQL / Persistent Stored Module (реализует SQL / PSM), процедурный язык / SQL (на основе Ada ) |
Microsoft / Sybase | T-SQL | Transact-SQL |
Mimer SQL | SQL / PSM | SQL / Persistent Stored Module (реализует SQL / PSM) |
MySQL | SQL / PSM | SQL / Persistent Stored Module (реализует SQL / PSM) |
MonetDB | SQL / PSM | SQL / Persistent Stored Module (реализует SQL / PSM) |
NuoDB | SSP | Starkey Stored Процедуры |
Oracle | PL / SQL | процедурный язык / SQL (на основе Ada ) |
PostgreSQL | PL / pgSQL | процедурный язык / язык структурированных запросов PostgreSQL (на основе сокращенного PL / SQL ) |
SAP R / 3 | ABAP | Расширенное программирование бизнес-приложений |
SAP HANA | SQLScript | SQLScript |
Sybase | Watcom-SQL | SQL Anywhere Watcom-SQL Dialect |
Teradata | SPL | Хранимый процедурный язык |
В дополнение к стандартным расширениям SQL / PSM и проприетарным расширениям SQL, процедурным и объектно-ориентированное программирование доступно на многих платформах SQL через интеграцию СУБД с другими языками. Стандарт SQL определяет расширения SQL / JRT (процедуры и типы SQL для языка программирования Java) для поддержки кода Java в базах данных SQL. Microsoft SQL Server 2005 использует SQLCLR (общеязыковая среда выполнения SQL Server) для размещения управляемых сборок .NET в базе данных, тогда как предыдущие версии SQL Server были ограничены в неуправляемые расширенные хранимые процедуры, в основном написанные на C. PostgreSQL позволяет пользователям писать функции на самых разных языках, включая Perl, Python, Tcl, JavaScript (PL / V8) и C.
Реализации SQL несовместимы между поставщиками и не обязательно полностью следовать стандартам. В частности, синтаксис даты и времени, конкатенация строк, NULL
s и сравнение чувствительность к регистру варьируются от поставщика к поставщику. Конкретными исключениями являются PostgreSQL и Mimer SQL, которые стремятся к соответствию стандартам, хотя PostgreSQL не придерживается стандарта в том, как выполняется сворачивание имен без кавычек. Сворачивание имен без кавычек в нижний регистр в PostgreSQL несовместимо со стандартом SQL, согласно которому имена без кавычек следует переводить в верхний регистр. Таким образом, Foo
должен быть эквивалентен FOO
, а не foo
согласно стандарту.
Популярные реализации SQL обычно не поддерживают базовые функции стандартного SQL, такие как типы данных DATE
или TIME
. Наиболее очевидными из таких примеров и, кстати, наиболее популярными коммерческими и проприетарными СУБД SQL являются Oracle (чья DATE
ведет себя как DATETIME
и не имеет типа TIME
) и MS SQL Server (до версии 2008). В результате код SQL редко может быть перенесен между системами баз данных без изменений.
Существует несколько причин отсутствия переносимости между системами баз данных:
SQL был принят в качестве стандарта в Американский национальный институт стандартов (ANSI) в 1986 году как SQL-86 и Международная организация по стандартизации (ISO) в 1987 году. Он поддерживается ISO / IEC JTC 1, Информационные технологии, Подкомитет SC 32, Управление данными и обмен.
До 1996 года программа стандартов управления данными Национального института стандартов и технологий (NIST) сертифицировала соответствие СУБД SQL стандарту SQL. Теперь поставщики самостоятельно -проверить соответствие t наследственные продукты.
Исходный стандарт объявил, что официальное произношение для «SQL» было инициализмом : («ess cue el»). Тем не менее, многие англоговорящие специалисты по базам данных (включая Дональда Чемберлина ) используют акроним -подобное произношение («продолжение»), отражая название предварительной версии языка, «SEQUEL».. Стандарт SQL претерпел ряд изменений:
Год | Имя | Псевдоним | Комментарии |
---|---|---|---|
1986 | SQL-86 | SQL-87 | Впервые формализована ANSI. |
1989 | SQL-89 | FIPS 127-1 | Незначительная редакция, добавляющая ограничения целостности, принятая как FIPS 127-1. |
1992 | SQL-92 | SQL2, FIPS 127-2 | Основная версия (ISO 9075), начальный уровень SQL-92 принят как FIPS 127-2. |
1999 | SQL: 1999 | SQL3 | Добавлено сопоставление регулярных выражений, рекурсивные запросы (например, транзитивное замыкание ), триггеры, поддержка процедурных операторов и операторов управления потоком, нескалярных типов (массивов) и некоторых объектно-ориентированных функций (например, структурированных типов ). Поддержка встраивания SQL в Java (SQL / OLB ) и наоборот (SQL / JRT ). |
2003 | SQL: 2003 | Введены функции, связанные с XML (SQL / XML ), оконные функции, стандартизованные последовательности и столбцы с автоматически сгенерированными значениями (включая идентификационные столбцы). | |
2006 | SQL: 2006 | ISO / IEC 9075-14: 2006 определяет способы использования SQL с XML. Он определяет способы импорта и хранения данных XML в базе данных SQL, управления ими в базе данных и публикации как XML, так и обычных данных SQL в форме XML. Кроме того, он позволяет приложениям интегрировать запросы в свой код SQL с помощью XQuery, языка запросов XML, опубликованного Консорциумом World Wide Web (W3C ), для одновременного доступа к обычным данным SQL и XML-документы. | |
2008 | SQL: 2008 | Легализует определения ORDER BY за пределами курсора. Добавляет триггеры INSTEAD OF, оператор TRUNCATE, предложение FETCH. | |
2011 | SQL: 2011 | Добавляет временные данные (PERIOD FOR) (дополнительная информация: Temporal database # History ). Улучшения для оконных функций и предложения FETCH. | |
2016 | SQL: 2016 | Добавляет сопоставление шаблонов строк, полиморфные табличные функции, JSON. | |
2019 | SQL: 2019 | Добавляет Часть 15, многомерные массивы (тип и операторы MDarray). |
Стандарт обычно обозначается шаблоном: ISO / IEC 9075-n: yyyy Part n: title, или, сокращенно, ISO / IEC 9075.
ISO / IEC 9075 дополняется ISO / IEC 13249: SQL Multimedia and Application Packages (SQL / MM), который определяет интерфейсы и пакеты на основе SQL для широко распространенных приложений, таких как видео, аудио и пространственные данные. Заинтересованные стороны могут приобрести документы стандартов SQL в ISO, IEC или ANSI. Черновик SQL: 2008 находится в свободном доступе в виде архива zip.
Стандарт SQL разделен на десять частей. Имеются пробелы в нумерации из-за вывода устаревших деталей.
ISO / IEC 9075 дополняются мультимедийными и прикладными пакетами ISO / IEC 13249 SQL. Этот тесно связанный, но отдельный стандарт разработан тем же комитетом. Он определяет интерфейсы и пакеты на основе SQL. Целью является унифицированный доступ к типичным приложениям баз данных, таким как текст, изображения, интеллектуальный анализ данных или пространственные данные.
ISO / IEC 9075 также сопровождается серией технических отчетов, опубликованных как ISO / IEC TR 19075 в 8 частях. В этих технических отчетах объясняется обоснование и использование некоторых функций SQL, приводя примеры, где это необходимо. Технические отчеты не являются нормативными; если есть какие-либо расхождения с 9075, текст в 9075 остается в силе. В настоящее время доступны следующие технические отчеты 19075:
Следует проводить различие между альтернативами SQL как языку и альтернативами самой реляционной модели. Ниже предлагаются реляционные альтернативы языку SQL. См. навигационная база данных и NoSQL для получения информации об альтернативах реляционной модели.
Архитектура распределенной реляционной базы данных (DRDA) была разработана рабочей группой внутри IBM в период с 1988 по 1994 год. DRDA обеспечивает работу в сети подключенные реляционные базы данных для взаимодействия для выполнения запросов SQL.
Интерактивный пользователь или программа могут выдавать операторы SQL в локальную RDB и получать таблицы данных и индикаторы состояния в ответ от удаленных RDB. Операторы SQL также могут быть скомпилированы и сохранены в удаленных RDB как пакеты, а затем вызваны по имени пакета. Это важно для эффективной работы прикладных программ, которые выдают сложные высокочастотные запросы. Это особенно важно, когда таблицы, к которым нужно получить доступ, находятся в удаленных системах.
Сообщения, протоколы и структурные компоненты DRDA определены Архитектурой управления распределенными данными.
SQL по-разному отличается от его теоретическая основа, реляционная модель и ее кортежное исчисление. В этой модели таблица представляет собой набор кортежей, тогда как в SQL таблицы и результаты запросов представляют собой списки строк: одна и та же строка может встречаться несколько раз, и порядок строк могут использоваться в запросах (например, в разделе LIMIT).
Критики утверждают, что SQL следует заменить языком, который строго возвращается к исходной основе: например, см. Третий манифест. Однако не существует известных доказательств того, что такую уникальность нельзя добавить к самому SQL или, по крайней мере, к его разновидности. Другими словами, вполне возможно, что SQL можно «исправить» или, по крайней мере, улучшить в этом отношении, так что отрасли, возможно, не придется переключаться на совершенно другой язык запросов для получения уникальности. Дебаты по этому поводу остаются открытыми.
Чемберлин обсуждает четыре исторических критических замечания SQL в статье 2012 года:
Ранние спецификации не поддерживали основные функции, такие как как первичные ключи. Наборы результатов не могут быть названы, а подзапросы не определены. Они были добавлены в 1992 году.
Концепция Нулевого является предметом некоторых споров. Маркер Null указывает на отсутствие значения, даже 0 для целочисленного столбца или строки длины 0 для текстового столбца. Концепция Nulls применяет 3-значную логику в SQL, которая является конкретной реализацией общей 3-значной логики.
Другой популярной критикой является то, что он позволяет дублировать строки, обеспечивая интеграцию с такими языками, как Python, типы данных которых могут затруднять точное представление данных, что затрудняет синтаксический анализ и отсутствие модульности.
Этого можно избежать, объявляя уникальное ограничение с одним или несколькими полями, которые однозначно идентифицируют строку в таблице. Это ограничение также может стать первичным ключом таблицы.
В смысле, аналогичном Объектно-реляционное несоответствие импеданса, существует несоответствие между декларативным языком SQL и процедурными языками, в которые обычно встроен SQL..
Основные категории целостности данных каждой СУБД.
Устанавливает, что в таблице первичный ключ имеет уникальное значение для каждой строки, проверяя уникальность значения первичного ключа, избегая дублирования строк в таблице.
Ограничивает тип, формат и диапазон значений, которые применяются к допустимым записям для столбца в таблице
Создает строки в таблице, которые используются другими записями, невозможно удалить
Применяются другие особые правила, не указанные выше
Стандарт SQL определяет три типа типов данных:
Сконструированные типы - это один из ARRAY, MULTISET, REF (erence) или ROW... Типы, определяемые пользователем, сопоставимы с классами объектно-ориентированного языка со своими собственными конструкторами, наблюдателями, мутаторами, методами, наследованием, перегрузкой, перезаписью, интерфейсами и т. Д.
ISO /IEC Целевая группа по информационным технологиям публикует общедоступные стандарты, включая SQL. Здесь публикуются Технические исправления (исправления) и Технические отчеты (документы для обсуждения).
SQL - Часть 1: Framework (SQL / Framework)
Формальные стандарты SQL доступны в ISO и ANSI за плату.. Для информативного использования, в отличие от строгого соблюдения стандартов, часто бывает достаточно поздних черновиков.