stringtranslate.com

SQL

Язык структурированных запросов ( SQL ) ( / ˌ ɛ s ˌ k juː ˈ ɛ l / SQL, иногда / ˈ s k w əl / «продолжение» по историческим причинам)[4][5]предметно-ориентированный язык,используемый для управления данными, особенно всистеме управления реляционными базами данных(СУБД). Это особенно полезно при работе соструктурированными данными, т. е. данными, включающими отношения между сущностями и переменными.

Представленный в 1970-х годах, SQL предлагал два основных преимущества по сравнению со старыми API -интерфейсами чтения и записи , такими как ISAM или VSAM . Во-первых, он представил концепцию доступа ко многим записям с помощью одной команды. Во-вторых, это устраняет необходимость указывать, как добраться до записи, т. е. с индексом или без него .

Первоначально основанный на реляционной алгебре и кортежном реляционном исчислении , SQL состоит из множества типов операторов, [6] которые можно неофициально классифицировать как подъязыки , обычно: язык запроса данных (DQL), [a] язык определения данных (DDL), [b] язык управления данными (DCL) и язык манипулирования данными (DML). [c] [7] Область применения SQL включает запрос данных, манипулирование данными (вставка, обновление и удаление), определение данных ( создание и изменение схемы ) и управление доступом к данным. Хотя SQL по сути является декларативным языком ( 4GL ), он также включает в себя процедурные элементы.

SQL был одним из первых коммерческих языков, использовавших реляционную модель Эдгара Ф. Кодда . Модель была описана в его влиятельной статье 1970 года «Реляционная модель данных для больших общих банков данных». [8] Несмотря на то, что SQL не полностью придерживался реляционной модели, описанной Коддом , он стал наиболее широко используемым языком баз данных. [9] [10]

SQL стал стандартом Американского национального института стандартов (ANSI) в 1986 году и Международной организации по стандартизации (ISO) в 1987 году. [11] С тех пор стандарт несколько раз пересматривался, чтобы включить больший набор функций и включить общие расширения. Несмотря на существование стандартов, практически ни одна из существующих реализаций не соответствует им полностью, и большая часть кода SQL требует хотя бы некоторых изменений перед переносом в другие системы баз данных .

История

SQL был первоначально разработан в IBM Дональдом Д. Чемберлином и Рэймондом Ф. Бойсом после изучения реляционной модели от Эдгара Ф. Кодда [12] в начале 1970-х годов. [13] Эта версия, первоначально называвшаяся SEQUEL ( структурированный английский язык запросов ), была разработана для манипулирования и извлечения данных, хранящихся в оригинальной квазиреляционной системе управления базами данных IBM, System R , которую разработала группа из исследовательской лаборатории IBM в Сан-Хосе. в течение 1970-х годов. [13]

Первой попыткой Чемберлина и Бойса создать язык реляционных баз данных был SQUARE (определение запросов в реляционной среде), но его было трудно использовать из-за нотации индексов и надстрочных индексов. Переехав в Исследовательскую лабораторию Сан-Хосе в 1973 году, они начали работу над продолжением SQUARE. [12] Первоначальное название SEQUEL, которое широко рассматривается как игра слов на QUEL , языке запросов Ingres , [14] позже было изменено на SQL (опущены гласные), поскольку «SEQUEL» было товарным знаком британской компании Hawker . Компания «Сиддели Дайнемикс Инжиниринг Лимитед». [15] Метка SQL позже стала аббревиатурой языка структурированных запросов.

После тестирования SQL на испытательных площадках клиентов, чтобы определить полезность и практичность системы, IBM начала разработку коммерческих продуктов на основе своего прототипа System R, включая System/38 , SQL/DS и IBM Db2 , которые были коммерчески доступны в 1979, 1981 годах. и 1983 год соответственно. [16]

В конце 1970-х годов компания Relational Software, Inc. (ныне Oracle Corporation ) увидела потенциал концепций, описанных Коддом, Чемберлином и Бойсом, и разработала собственную СУБД на основе SQL с намерением продать ее ВМС США и Центральной разведке . Агентство и другие правительственные учреждения США . В июне 1979 года компания Relational Software представила одну из первых коммерчески доступных реализаций SQL — Oracle V2 (Версия 2) для компьютеров VAX .

К 1986 году группы стандартов ANSI и ISO официально приняли стандартное определение языка «Язык баз данных SQL». Новые версии стандарта были опубликованы в 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011, [12] 2016 и совсем недавно в 2023 году. [17]

Синтаксис

Диаграмма, показывающая несколько элементов языка SQL, составляющих один оператор.

Язык SQL подразделяется на несколько языковых элементов, в том числе:

Процедурные расширения

SQL создан для конкретной цели: для запроса данных , содержащихся в реляционной базе данных . SQL — это декларативный язык программирования , основанный на множествах , а не императивный язык программирования, такой как C или BASIC . Однако расширения стандартного SQL добавляют функциональные возможности процедурного языка программирования , такие как конструкции управления потоком.

Помимо стандартных расширений SQL/PSM и собственных расширений SQL, на многих платформах SQL доступно процедурное и объектно-ориентированное программирование посредством интеграции СУБД с другими языками. Стандарт SQL определяет расширения SQL/JRT (подпрограммы и типы SQL для языка программирования Java) для поддержки кода Java в базах данных SQL. Microsoft SQL Server 2005 использует SQLCLR (SQL Server Common Language Runtime) для размещения управляемых сборок .NET в базе данных , в то время как предыдущие версии SQL Server были ограничены неуправляемыми расширенными хранимыми процедурами, написанными в основном на C. PostgreSQL позволяет пользователям писать функции в широком множество языков, включая Perl , Python , Tcl , JavaScript (PL/V8) и C. [19]

Функциональная совместимость и стандартизация

Обзор

Реализации SQL несовместимы между поставщиками и не обязательно полностью соответствуют стандартам. В частности, синтаксис даты и времени, конкатенация строк, NULLs и чувствительность к регистру при сравнении различаются от поставщика к поставщику. PostgreSQL [20] и Mimer SQL [21] стремятся соответствовать стандартам, хотя PostgreSQL не придерживается стандартов во всех случаях. Например, преобразование имен без кавычек в нижний регистр в PostgreSQL несовместимо со стандартом SQL [22] , который гласит, что имена без кавычек следует переводить в верхний регистр. [23] Таким образом, Fooдолжно быть эквивалентно FOOнесоответствию fooстандарту.

Популярные реализации SQL обычно не поддерживают основные функции стандартного SQL, такие как типы данных DATEили TIME. Наиболее очевидными такими примерами и, между прочим, наиболее популярными коммерческими и частными СУБД SQL являются Oracle (которая DATEведет себя как DATETIME, [24] [25] и не имеет TIMEтипа) [26] и MS SQL Server (до версии 2008 года). В результате код SQL редко можно переносить между системами баз данных без изменений.

Причины несовместимости

Несколько причин отсутствия переносимости между системами баз данных включают в себя:

История стандартизации

SQL был принят в качестве стандарта ANSI в 1986 году как SQL-86 [28] и ISO в 1987 году. [11] Он поддерживается ISO/IEC JTC 1, Информационные технологии, Подкомитет SC 32, Управление данными и обмен ими .

До 1996 года программа стандартов управления данными Национального института стандартов и технологий (NIST) сертифицировала соответствие СУБД SQL стандарту SQL. Теперь поставщики самостоятельно сертифицируют соответствие своей продукции. [29]

Исходный стандарт декларировал, что официальное произношение слова «SQL» представляет собой инициализм : / ˌ ɛ s ˌ k juː ˈ ɛ l / («ess cue el»). [9] Несмотря на это, многие англоязычные специалисты по базам данных (включая самого Дональда Чемберлина [30] ) используют похожее на аббревиатуру произношение / ˈ s k w əl / («продолжение»), [31] отражающее название предварительной разработки языка. , «ПРОДОЛЖЕНИЕ». [13] [15] [30]
Стандарт SQL претерпел ряд изменений:

Текущий стандарт

Стандарт обычно обозначается шаблоном: ISO/IEC 9075-n:yyyy Part n: title или, сокращенно, ISO/IEC 9075 . Заинтересованные стороны могут приобрести документы по стандартам в ISO, [36] IEC или ANSI. Некоторые старые проекты находятся в свободном доступе. [37] [38] [39]

ISO/IEC 9075 дополняется ISO/IEC 13249: Пакеты мультимедиа и приложений SQL и некоторыми техническими отчетами .

Альтернативы

Следует проводить различие между альтернативами SQL как языку и альтернативами самой реляционной модели. Ниже предлагаются реляционные альтернативы языку SQL. См. навигационную базу данных и NoSQL для альтернатив реляционной модели.

Распределенная обработка SQL

Архитектура распределенной реляционной базы данных (DRDA) была разработана рабочей группой внутри IBM с 1988 по 1994 год. DRDA позволяет реляционным базам данных, подключенным к сети, взаимодействовать при выполнении запросов SQL. [41] [42]

Интерактивный пользователь или программа может отправлять операторы SQL в локальную RDB и получать в ответ таблицы данных и индикаторы состояния от удаленных RDB. Операторы SQL также можно скомпилировать и сохранить в удаленных RDB в виде пакетов, а затем вызывать по имени пакета. Это важно для эффективной работы прикладных программ, выдающих сложные высокочастотные запросы. Это особенно важно, когда таблицы, к которым осуществляется доступ, расположены в удаленных системах.

Сообщения, протоколы и структурные компоненты DRDA определяются архитектурой управления распределенными данными . Распределенная обработка SQL, известная как DRDA, отличается от современных распределенных баз данных SQL.

Критика

Дизайн

SQL во многом отклоняется от своей теоретической основы — реляционной модели и кортежного исчисления. В этой модели таблица представляет собой набор кортежей, тогда как в SQL таблицы и результаты запроса представляют собой списки строк; одна и та же строка может встречаться несколько раз, а порядок строк можно использовать в запросах (например, в предложении LIMIT). Критики утверждают, что SQL следует заменить языком, который строго возвращается к исходной основе: например, см. « Третий манифест» Хью Дарвена и Си Джей Дейта (2006, ISBN  0-321-39942-0 ).

Ортогональность и полнота

Ранние спецификации не поддерживали основные функции, такие как первичные ключи. Наборы результатов не могли быть названы, а подзапросы не были определены. Они были добавлены в 1992 году. [12]

Отсутствие типов сумм было описано как препятствие на пути полного использования пользовательских типов SQL. Например, поддержку JSON необходимо было добавить в новом стандарте в 2016 году. [43]

Нулевой

Концепция Null является предметом некоторых дискуссий . Маркер Null указывает на отсутствие значения и отличается от значения 0 для целочисленного столбца или пустой строки для текстового столбца. Концепция Nulls обеспечивает 3-значную логику в SQL , которая является конкретной реализацией общей 3-значной логики . [12]

Дубликаты

Другая популярная критика заключается в том, что он допускает дублирование строк, что затрудняет интеграцию с такими языками, как Python , чьи типы данных могут затруднить точное представление данных [12] с точки зрения синтаксического анализа и отсутствия модульности. Обычно этого можно избежать, объявляя первичный ключ или ограничение уникальности с одним или несколькими столбцами, которые однозначно идентифицируют строку в таблице.

Несоответствие импеданса

В смысле, аналогичном несоответствию объектно-реляционного импеданса , несоответствие возникает между декларативным языком SQL и процедурными языками, в которые обычно встроен SQL. [ нужна цитата ]

Типы данных SQL

Стандарт SQL определяет три типа типов данных (глава 4.1.1 SQL/Foundation):

  • предопределенные типы данных
  • сконструированные типы
  • определяемые пользователем типы.

К составным типам относятся ARRAY, MULTISET, REF(erence) или ROW. Пользовательские типы сравнимы с классами объектно-ориентированного языка со своими собственными конструкторами, наблюдателями, мутаторами, методами, наследованием, перегрузкой, перезаписью, интерфейсами и т. д. Предопределенные типы данных внутренне поддерживаются реализацией.

Предопределенные типы данных

  • Персонаж (СИМВОЛ)
  • Изменение символов (VARCHAR)
  • Большой символьный объект (CLOB)
  • Национальный характер (НЧАР)
  • Национальный характер варьируется (NCHAR VARYING)
  • Большой объект национального характера (NCLOB)
  • Двоичный (БИНАРНЫЙ)
  • Двоичная переменная (VARBINARY)
  • Большой двоичный объект (BLOB)
  • Точные числовые типы (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
  • Приблизительные числовые типы (FLOAT, REAL, DOUBLE PRECISION)
  • Десятичный тип с плавающей запятой (DECFLOAT)

Смотрите также

Примечания

  1. ^ Формально операторы «SQL-данных», за исключением операторов «изменения SQL-данных»; это прежде всего оператор Select .
  2. ^ Формально, операторы «SQL-схемы».
  3. ^ Формально операторы «изменения SQL-данных»

Рекомендации

  1. Пол, Райан (24 октября 2005 г.). «Экскурсия по Microsoft Command Shell». Арс Техника . Проверено 10 апреля 2011 г.
  2. ^ «Регистрация типа носителя для приложения/sql» . Управление по присвоению номеров в Интернете . 10 апреля 2013 года . Проверено 10 апреля 2013 г.
  3. ^ Шафранович Ю. (апрель 2013 г.). «Тип носителя приложения/sql, RFC 6922». Рабочая группа по интернет-инжинирингу . п. 3. дои : 10.17487/RFC6922 . Проверено 10 апреля 2013 г.
  4. ^ Болье, Алан (апрель 2009 г.). Мэри Э. Треселер (ред.). Изучение SQL (2-е изд.). Севастополь, Калифорния, США: О'Рейли. ISBN 978-0-596-52083-0.
  5. ^ Чемберлин, Дональд Д.; Франа, Филип Л. (3 октября 2001 г.). «Устное историческое интервью с Дональдом Д. Чемберлином». Университетская цифровая консервация . Проверено 14 января 2020 г. Мы изменили первоначальное название «SEQUEL» на SQL, потому что получили письмо от чьего-то адвоката, в котором говорилось, что имя «SEQUEL» принадлежит им. Мы сократили его до SQL (язык структурированных запросов), и этот продукт стал известен как SQL/DS.
  6. ^ SQL-92 , 4.22 SQL-операторы, 4.22.1 Классы SQL-операторов «Существует как минимум пять способов классификации SQL-операторов:», 4.22.2, SQL-операторы, классифицированные по функциям «Ниже приведены основные классы SQL-операторов: SQL-операторы:"; SQL:2003 4.11 SQL-операторы и более поздние версии.
  7. ^ Чатем, Марк (2012). Язык структурированных запросов на примере - Том I: Язык запросов к данным. Лулу.com. п. 8. ISBN 9781291199512.
  8. ^ Кодд, Эдгар Ф. (июнь 1970 г.). «Реляционная модель данных для больших общих банков данных». Коммуникации АКМ . 13 (6): 377–87. CiteSeerX 10.1.1.88.646 . дои : 10.1145/362384.362685. S2CID  207549016. 
  9. ^ аб Чаппл, Майк. «Основы SQL». Базы данных . О сайте.com . Проверено 28 января 2009 г.
  10. ^ «Язык структурированных запросов (SQL)» . Международные Бизнес Машины. 27 октября 2006 года . Проверено 10 июня 2007 г.
  11. ^ ab «ISO 9075:1987: Информационные технологии. Языки баз данных. SQL. Часть 1. Структура (SQL/Framework)». 1 июня 1987 г.
  12. ^ abcdef Чемберлин, Дональд (2012). «Ранняя история SQL». IEEE Анналы истории вычислений . 34 (4): 78–82. дои : 10.1109/MAHC.2012.61. S2CID  1322572.
  13. ^ abc Чемберлин, Дональд Д.; Бойс, Раймонд Ф. (1974). «ПРОДОЛЖЕНИЕ: структурированный английский язык запросов» (PDF) . Материалы семинара ACM SIGFIDET 1974 года по описанию, доступу и контролю данных . Ассоциация вычислительной техники: 249–64. Архивировано из оригинала (PDF) 26 сентября 2007 г. Проверено 9 июня 2007 г.
  14. ^ Старки, Джим. «Динамический SQL, сантехника и внутренний API». www.ibphoenix.com . Проверено 19 января 2023 г.
  15. ^ аб Оппель, Энди (27 февраля 2004 г.). Базы данных демистифицированы. Сан-Франциско, Калифорния : McGraw-Hill Osborne Media. стр. 90–1. ISBN 978-0-07-146960-9.
  16. ^ «История IBM, 1978». Архивы IBM . ИБМ. 23 января 2003 года . Проверено 9 июня 2007 г.
  17. ^ «ISO - ISO/IEC JTC 1/SC 32 - Управление данными и обмен» . www.iso.org . Проверено 2 января 2021 г.
  18. ^ Международный стандарт ANSI/ISO/IEC (IS). Язык базы данных SQL. Часть 2. Основа (SQL/Foundation). 1999.
  19. ^ «Программирование сервера PostgreSQL» . Официальная документация PostgreSQL 9.1 . postgresql.org. 2011 . Проверено 9 марта 2012 г.
  20. ^ «О PostgreSQL». Официальный сайт PostgreSQL 9.1 . Группа глобального развития PostgreSQL. 2012 . Проверено 9 марта 2012 г. PostgreSQL гордится соответствием стандартам. Его реализация SQL строго соответствует стандарту ANSI-SQL:2008.
  21. ^ «Mimer SQL, построенный на стандартах» . Официальный сайт Mimer SQL . Мимер Информационные технологии. 2009.
  22. ^ «4.1. Лексическая структура». Документация PostgreSQL . 2018.
  23. ^ «(Второй неофициальный обзорный проект) ISO/IEC 9075:1992, Язык баз данных SQL, Раздел 5.2, правило синтаксиса 11» . 30 июля 1992 года.
  24. ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Герман; Белламконда, Шрикант (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных». Справочник по языку SQL базы данных Oracle 11g, выпуск 2 (11.2) . Библиотека документации базы данных Oracle. Редвуд-Сити, Калифорния: Oracle USA, Inc. Проверено 29 декабря 2010 г. Для каждого значения Oracle хранит следующую информацию: век, год, месяц, число, час, минута и секунда.DATE
  25. ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Герман; Белламконда, Шрикант (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных». Справочник по языку SQL базы данных Oracle 11g, выпуск 2 (11.2) . Библиотека документации базы данных Oracle. Редвуд-Сити, Калифорния: Oracle USA, Inc. Проверено 29 декабря 2010 г. Типы данных datetime ...DATE
  26. ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Герман; Белламконда, Шрикант (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных». Справочник по языку SQL базы данных Oracle 11g, выпуск 2 (11.2) . Библиотека документации базы данных Oracle. Редвуд-Сити, Калифорния: Oracle USA, Inc. Проверено 29 декабря 2010 г. Не определяйте столбцы со следующими типами данных SQL/DS и DB2, поскольку они не имеют соответствующего типа данных Oracle:...TIME
  27. ^ Дата, Крис Дж. (2013). Реляционная теория для компьютерных специалистов: что на самом деле представляют собой реляционные базы данных (1-е изд.). Севастополь, Калифорния: O'Reilly Media. ISBN 978-1-449-36943-9.
  28. ^ «В поисках помощи». X3H2 Records, 1978–95 . Американский национальный институт стандартов.
  29. Кукла, Шелли (19 июня 2002 г.). «Является ли SQL больше стандартом?». Builder.com компании TechRepublic . TechRepublic. Архивировано из оригинала 5 июля 2012 г. Проверено 12 апреля 2016 г.
  30. ^ аб Гиллеспи, Патрик. «Произнесение SQL: SQL или продолжение?» . Проверено 12 февраля 2012 г.
  31. ^ Мелтон, Джим; Алан Р. Саймон (1993). «1.2. Что такое SQL?» . Понимание нового SQL: полное руководство. Морган Кауфманн. п. 536. ИСБН 978-1-55860-245-8. SQL (правильно произносится «ess cue ell» вместо довольно распространенного «продолжения»)…
  32. ^ Вагнер, Майкл (2010). SQL/XML:2006 — Оценка соответствия стандартам ausgewählter Datenbanksysteme . Дипломика Верлаг. п. 100. ИСБН 978-3-8366-9609-8.
  33. ^ «SQL:2008 теперь утвержденный международный стандарт ISO» . Сибаза. Июль 2008 г. Архивировано из оригинала 28 июня 2011 г.
  34. ^ Кришна Кулкарни, Ян-Эйке Михелс (сентябрь 2012 г.). «Временные функции в SQL:2011» (PDF) . SIGMOD Запись . 41 (3).
  35. ^ Фред Земке (2012). «Что нового в SQL:2011» (PDF) . Корпорация Оракл.
  36. ^ «ИСО/МЭК 9075».
  37. ^ SQL: проект 1992 г. (текст)
  38. ^ SQL: проект 2008 г. (zip) , Whitemarsh Information Systems Corporation
  39. ^ SQL: проект 2011 г. (zip) , Whitemarsh Information Systems Corporation
  40. ^ Фернандо Саенс-Перес. «Внешние соединения в дедуктивной системе баз данных» (PDF) . Lbd.udc.es. _ Проверено 16 января 2017 г.
  41. ^ Рейнш, Р. (1988). «Распределенная база данных для SAA». IBM Systems Journal . 27 (3): 362–389. дои : 10.1147/sj.273.0362.
  42. ^ Справочник по архитектуре распределенных реляционных баз данных . Корпорация IBM SC26-4651-0. 1990.
  43. ^ Брэндон, Джейми (июль 2021 г.). «Против SQL» . Проверено 2 августа 2021 г.

Источники

Внешние ссылки