Парадигма | Декларативная |
---|---|
Семья | Язык запроса |
Разработано | Дональд Д. Чемберлин Раймонд Ф. Бойс |
Разработчик | ISO / IEC |
Впервые появился | 1974 |
Стабильный выпуск | SQL: 2016 г. / декабрь 2016 г . |
Печатная дисциплина | Статичный , сильный |
Операционные системы | Кроссплатформенность |
Веб-сайт | www |
Основные реализации | |
Многие | |
Диалекты | |
Под влиянием | |
Журнал данных | |
Под влиянием | |
CQL , LINQ , SPARQL , SOQL, PowerShell , [1] JPQL , jOOQ , N1QL | |
|
Расширение имени файла | .sql |
---|---|
Тип интернет-СМИ | |
Разработано | ISO / IEC |
Первый выпуск | 1986 г. |
Тип формата | База данных |
Стандарт | ISO / IEC 9075 |
Открытый формат ? | да |
Веб-сайт | www |
SQL - ( / ˌ ɛ с ˌ к Ju ɛ л / ( слушать ) SQL , [4] / ы я к ш əl / "продолжение"; язык структурированных запросов ) [5] является язык предметно-ориентированный используется в программировании и разработан для управления данными, хранящимися в системе управления реляционными базами данных (СУБД), или для потоковой обработки в системе управления реляционными потоками данных (RDSMS). Это особенно полезно при обращении сструктурированные данные , то есть данные, включающие отношения между сущностями и переменными.
SQL предлагает два основных преимущества по сравнению со старыми API чтения-записи, такими как ISAM или VSAM . Во-первых, он представил концепцию доступа к множеству записей с помощью одной единственной команды. Во-вторых, это избавляет от необходимости указывать, как достичь записи, например, с индексом или без него .
Первоначально основанный на реляционной алгебре и Исчисление кортежей , SQL состоит из множества типов утверждений, [6] , которые могут быть неофициально классифицированы как подъязыков , обычно: а язык запросов данных (DQL), [а] языка определения данных (DDL), [Ь] язык управления данными (DCL) и язык манипулирования данными (DML). [c] [7] Сфера применения SQL включает запросы данных, манипулирование данными (вставка, обновление и удаление), определение данных ( создание и изменение схемы ) и управление доступом к данным. Хотя SQL по сутидекларативный язык ( 4GL ), он также включает процедурные элементы.
SQL был один из первых коммерческих языков для использования Кодд «s реляционная модели . Эта модель была описана в его влиятельной статье 1970 года «Реляционная модель данных для больших общих банков данных». [8] Несмотря на то, что он не полностью придерживался реляционной модели, описанной Коддом , он стал наиболее широко используемым языком баз данных. [9] [10]
SQL стал стандартом в Американском национальном институте стандартов (ANSI) в 1986 году, и в Международных организациях по стандартизации (ИСО) в 1987 году [11] С тех пор стандарт был пересмотрен с целью включения более широкий набора функций. Несмотря на существование стандартов, большая часть кода SQL требует по крайней мере некоторых изменений перед переносом в другие системы баз данных.
История [ править ]
SQL был первоначально разработан в IBM по Дональд Д. Чемберлин и Рэймонд Бойс , узнав о реляционной модели от Кодд [12] в начале 1970 - х годов. [13] Эта версия, первоначально называвшаяся SEQUEL (Structured English Query Language), была разработана для управления и извлечения данных, хранящихся в исходной квазиреляционной системе управления базами данных IBM, System R , которую группа из исследовательской лаборатории IBM в Сан-Хосе разработала в 1970-х годах. [13]
Первой попыткой Чемберлина и Бойса создать язык реляционных баз данных был Square, но его было трудно использовать из-за записи нижнего индекса. После перехода в исследовательскую лабораторию Сан-Хосе в 1973 году они начали работу над SEQUEL. [12] акроним SEQUEL было изменено на SQL , потому что «ПРОДОЛЖЕНИЕ» был торговой маркой в британской Hawker Siddeley компании Dynamics Engineering Limited. [14]
После тестирования SQL на тестовых сайтах заказчиков для определения полезности и практичности системы IBM приступила к разработке коммерческих продуктов на основе своего прототипа System R, включая System / 38 , SQL / DS и DB2 , которые были коммерчески доступны в 1979, 1981 годах. и 1983, соответственно. [15]
В конце 1970 - х годов, Relational Software, Inc. (теперь Oracle Corporation ) увидел потенциал концепций , описанных Коддом, Чемберлин и Бойс и разработали свои собственные SQL на основе СУБД с устремлениями его продажи в ВМС США , Центрального разведывательного управления Agency и другие правительственные агентства США . В июне 1979 года компания Relational Software представила первую коммерчески доступную реализацию SQL, Oracle V2 (Version2) для компьютеров VAX .
К 1986 году группы стандартов ANSI и ISO официально приняли стандартное определение языка «Database Language SQL». Новые версии стандарта были опубликованы в 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011, [12] и совсем недавно, в 2016 году. [16]
Синтаксис [ править ]
Язык SQL подразделяется на несколько языковых элементов, в том числе:
- Предложения , которые являются составными компонентами утверждений и запросов. (В некоторых случаях это необязательно.) [17]
- Выражения , которые могут создавать либо скалярные значения, либо таблицы, состоящие из столбцов и строк данных.
- Предикаты , которые определяют условия, которые могут быть оценены с помощью трехзначной логики SQL (3VL) (истина / ложь / неизвестно) или логических значений истинности и используются для ограничения эффектов операторов и запросов или для изменения потока программы.
- Запросы , которые извлекают данные на основе определенных критериев. Это важный элемент SQL .
- Операторы , которые могут иметь постоянное влияние на схемы и данные или могут управлять транзакциями , потоком программы, соединениями, сеансами или диагностикой.
- Операторы SQL также включают терминатор оператора точка с запятой (";"). Хотя он не требуется на каждой платформе, он определен как стандартная часть грамматики SQL.
- Незначительные пробелы обычно игнорируются в операторах и запросах SQL, что упрощает форматирование кода SQL для удобства чтения.
Процедурные расширения [ править ]
SQL разработан для конкретной цели: запрашивать данные, содержащиеся в реляционной базе данных . SQL - это декларативный язык программирования , основанный на наборах , а не императивный язык программирования, такой как C или BASIC . Однако расширения Standard 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 [18] | (на основе Postgres PL / pgSQL) |
Изобретательный | PSQL [19] | Invantive Procedural SQL (реализует SQL / PSM и PL / SQL ) |
MariaDB | SQL / PSM , PL / SQL | SQL / Persistent Stored Module (реализует SQL / PSM), процедурный язык / SQL (на основе Ada ) [20] |
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 | Хранимые процедуры Старки |
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 Диалект |
Терадата | 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. [21]
Функциональная совместимость и стандартизация [ править ]
Обзор [ править ]
Реализации SQL несовместимы между поставщиками и не обязательно полностью соответствуют стандартам. В частности, синтаксис даты и времени, конкатенация строк, NULL
s и чувствительность к регистру при сравнении варьируются от поставщика к поставщику. Конкретными исключениями являются PostgreSQL [22] и Mimer SQL [23], которые стремятся к соответствию стандартам, хотя PostgreSQL не придерживается стандарта в том, как выполняется сворачивание имен без кавычек. Сворачивание имен без кавычек в нижний регистр в PostgreSQL несовместимо со стандартом SQL [24], который гласит, что имена без кавычек следует переводить в верхний регистр. [25] Таким образом, Foo
должно быть эквивалентно FOO
неfoo
по стандарту.
Популярные реализации SQL обычно не поддерживают базовые функции стандартного SQL, такие как типы данных DATE
или TIME
. Наиболее очевидными из таких примеров и, кстати, наиболее популярными коммерческими и проприетарными СУБД SQL являются Oracle (которая DATE
ведет себя как DATETIME
, [26] [27] и не имеет TIME
типа) [28] и MS SQL Server (до версии 2008 года). В результате код SQL редко может быть перенесен между системами баз данных без изменений.
Причины несовместимости [ править ]
Несколько причин отсутствия переносимости между системами баз данных включают:
- Сложность и размер стандарта SQL означает, что большинство разработчиков не поддерживают весь стандарт.
- Стандарт не определяет поведение базы данных в нескольких важных областях (например, индексы , файловое хранилище ...), оставляя реализациям решать, как себя вести.
- Стандарт SQL точно определяет синтаксис, который должна реализовать соответствующая система баз данных. Однако стандартная спецификация семантики языковых конструкций менее четко определена, что приводит к двусмысленности.
- Многие поставщики баз данных имеют большие существующие клиентские базы; там, где более новая версия стандарта SQL конфликтует с предыдущим поведением базы данных поставщика, поставщик может не желать нарушать обратную совместимость .
- У поставщиков мало коммерческих стимулов, чтобы упростить смену поставщиков баз данных (см. Привязку к поставщику ).
- Пользователи, оценивающие программное обеспечение баз данных, обычно ставят другие факторы, такие как производительность, выше в свои приоритеты, чем соответствие стандартам.
История стандартизации [ править ]
SQL был принят в качестве стандарта ANSI в 1986 году как SQL-86 [29] и ISO в 1987 году. [11] Он поддерживается ISO / IEC JTC 1, Информационные технологии, Подкомитетом SC 32, Управление данными и обмен .
До 1996 года программа стандартов управления данными Национального института стандартов и технологий (NIST) сертифицировала соответствие СУБД SQL стандарту SQL. Продавцы теперь самостоятельно подтверждают соответствие своей продукции. [30]
Оригинальный стандарт объявил , что официальное произношение «SQL» была аббревиатура : / ˌ ɛ с ˌ к Ju ɛ л / ( «ESS кий эль»). [9] Несмотря на это , многие говорящие на английском языке профессионалы базы данных ( в том числе и сам Дональд Чемберлина [31] ) использует аббревиатуру -like произношения / сек ˙I K ш əl / ( «продолжение»), [32] зеркального имени развития пререлиза на языке , «ПРОДОЛЖЕНИЕ». [13] [14] [31]
Стандарт 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-документам. [33] | |
2008 г. | SQL: 2008 | Легализует определения ORDER BY за пределами курсора. Добавляет триггеры INSTEAD OF, оператор TRUNCATE, предложение [34] FETCH. | |
2011 г. | SQL: 2011 | Добавляет временные данные (PERIOD FOR) [35] (дополнительная информация: Temporal database # History ). Улучшения оконных функций и предложения FETCH. [36] | |
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, [37] IEC или ANSI. Черновик SQL: 2008 находится в свободном доступе в виде zip- архива. [38]
Анатомия стандарта SQL [ править ]
Стандарт SQL разделен на 10 частей, но с пробелами в нумерации из-за изъятия устаревших частей.
- ISO / IEC 9075-1: 2016, часть 1: Framework (SQL / Framework). Он предоставляет логические концепции. [39]
- ISO / IEC 9075-2: 2016 Часть 2: Foundation (SQL / Foundation). Он содержит наиболее важные элементы языка и состоит как из обязательных, так и из дополнительных функций.
- ISO / IEC 9075-3: 2016 Часть 3: Интерфейс уровня вызовов ( SQL / CLI ). Он определяет компоненты интерфейса (структуры, процедуры, привязки переменных), которые могут использоваться для выполнения операторов SQL из приложений, написанных на Ada, C соответственно C ++, COBOL, Fortran, MUMPS, Pascal или PL / I. (Для Java см. Часть 10.) SQL / CLI определяется таким образом, что операторы SQL и вызовы процедур SQL / CLI обрабатываются отдельно от исходного кода вызывающего приложения. Open Database Connectivity - это хорошо известная надмножество SQL / CLI. Эта часть стандарта состоит исключительно из обязательных функций.
- ISO / IEC 9075-4: 2016 Часть 4: Постоянные хранимые модули ( SQL / PSM ). Он стандартизирует процедурные расширения для SQL, включая поток управления, обработку условий, сигналы условий оператора и отказы, курсоры и локальные переменные, а также присвоение выражений переменным и параметрам. Кроме того, SQL / PSM формализует объявление и обслуживание постоянных языковых подпрограмм (например, «хранимых процедур»). Эта часть стандарта состоит исключительно из дополнительных функций.
- ISO / IEC 9075-9: 2016 Часть 9: Управление внешними данными ( SQL / MED ). Он предоставляет расширения для SQL, которые определяют оболочки сторонних данных и типы каналов данных, позволяющие SQL управлять внешними данными. Внешние данные - это данные, которые доступны, но не управляются СУБД на основе SQL. Эта часть стандарта состоит исключительно из дополнительных функций.
- ISO / IEC 9075-10: 2016 Часть 10: Привязки объектного языка ( SQL / OLB ). Он определяет синтаксис и семантику SQLJ , который является SQL, встроенным в Java (см. Также часть 3). Стандарт также описывает механизмы, обеспечивающие двоичную переносимость приложений SQLJ, и определяет различные пакеты Java и содержащиеся в них классы. Эта часть стандарта состоит исключительно из дополнительных функций. В отличие от SQL / OLB JDBC определяет API и не является частью стандарта SQL. [ необходима цитата ]
- ISO / IEC 9075-11: 2016 Часть 11: Схемы информации и определений ( SQL / Schemata ). Он определяет информационную схему и схему определения, предоставляя общий набор инструментов для самоописания баз данных и объектов SQL. Эти инструменты включают идентификатор объекта SQL, ограничения структуры и целостности, спецификации безопасности и авторизации, функции и пакеты ISO / IEC 9075, поддержку функций, предоставляемых реализациями СУБД на основе SQL, информацию о реализации СУБД на основе SQL и элементы определения размеров, а также значения, поддерживаемые реализациями СУБД. [40] Эта часть стандарта содержит как обязательные, так и дополнительные функции.
- ISO / IEC 9075-13: 2016 Часть 13: Подпрограммы и типы SQL с использованием языка программирования Java TM ( SQL / JRT ). Он определяет возможность вызова статических методов Java как подпрограмм из приложений SQL («Java-in-the-database»). Это также требует возможности использовать классы Java в качестве структурированных пользовательских типов SQL. Эта часть стандарта состоит исключительно из дополнительных функций.
- ISO / IEC 9075-14: 2016, часть 14: Спецификации, связанные с XML ( SQL / XML ). Он определяет расширения на основе SQL для использования XML в сочетании с SQL. Представлен тип данных XML , а также несколько процедур, функций и сопоставлений типов данных XML-SQL для поддержки обработки и хранения XML в базе данных SQL. [33] Эта часть стандарта состоит исключительно из дополнительных функций. [ необходима цитата ]
- ISO / IEC 9075-15: 2019 Часть 15: Многомерные массивы (SQL / MDA). Он определяет тип многомерного массива (MDarray) для SQL, а также операции с MDarrays, срезами MDarray, ячейками MDarray и связанными функциями. Эта часть стандарта состоит исключительно из дополнительных функций.
Расширения стандарта ISO / IEC [ править ]
ISO / IEC 9075 дополняется мультимедийными и прикладными пакетами ISO / IEC 13249 SQL . Этот тесно связанный, но отдельный стандарт разработан одним и тем же комитетом. Он определяет интерфейсы и пакеты на основе SQL. Целью является унифицированный доступ к типичным приложениям баз данных, таким как текст, изображения, интеллектуальный анализ данных или пространственные данные .
- ISO / IEC 13249-1: 2016 Часть 1: Структура
- ISO / IEC 13249-2: 2003 Часть 2: Полнотекстовый
- ISO / IEC 13249-3: 2016 Часть 3: Пространственные
- ISO / IEC 13249-5: 2003 Часть 5: Неподвижное изображение
- ISO / IEC 13249-6: 2006 Часть 6: Интеллектуальный анализ данных
- ISO / IEC 13249-7: 2013 Часть 7: История
- ISO / IEC 13249-8: xxxx Часть 8: MRA доступа к реестру метаданных (в процессе)
Технические отчеты [ править ]
ISO / IEC 9075 также сопровождается серией технических отчетов, опубликованных как ISO / IEC TR 19075. Эти технические отчеты объясняют обоснование и использование некоторых функций SQL, приводя примеры, где это уместно. Технические отчеты не являются нормативными; если есть какие-либо расхождения с 9075, текст в 9075 остается в силе. В настоящее время доступны 19075 технических отчетов:
- ISO / IEC TR 19075-1: 2011 Часть 1: Поддержка регулярных выражений XQuery в SQL
- ISO / IEC TR 19075-2: 2015 Часть 2: Поддержка SQL для информации, связанной со временем
- ISO / IEC TR 19075-3: 2015 Часть 3: SQL, встроенный в программы с использованием языка программирования Java
- ISO / IEC TR 19075-4: 2015 Часть 4: SQL с подпрограммами и типами с использованием языка программирования Java
- ISO / IEC TR 19075-5: 2016 Часть 5: Распознавание строк в SQL
- ISO / IEC TR 19075-6: 2017 Часть 6: Поддержка SQL для нотации объектов JavaScript (JSON)
- ISO / IEC TR 19075-7: 2017 Часть 7: Полиморфные табличные функции в SQL
- ISO / IEC TR 19075-8: 2019 Часть 8: Многомерные массивы (SQL / MDA)
- ISO / IEC TR 19075-9: 2020 Часть 9: Возможности онлайн-аналитической обработки (OLAP)
Альтернативы [ править ]
Следует проводить различие между альтернативами SQL как языку и альтернативами самой реляционной модели. Ниже предлагаются реляционные альтернативы языку SQL. См. Информацию об альтернативах реляционной модели в навигационной базе данных и NoSQL .
- .QL : объектно-ориентированный журнал данных
- Язык 4D запросов (4D QL)
- Datalog : критики предполагают, что Datalog имеет два преимущества перед SQL: он имеет более чистую семантику, которая облегчает понимание и обслуживание программ, и более выразительно, особенно для рекурсивных запросов. [41]
- HTSQL : метод запроса на основе URL
- IBM Business System 12 (IBM BS12): одна из первых полностью реляционных систем управления базами данных, представленная в 1982 году.
- ISBL
- jOOQ : SQL, реализованный на Java как внутренний предметно-ориентированный язык
- Java Persistence Query Language (JPQL): язык запросов, используемый Java Persistence API и библиотекой сохраняемости Hibernate.
- JavaScript : MongoDB реализует свой язык запросов в API JavaScript.
- LINQ : запускает операторы SQL, написанные как языковые конструкции, для запроса коллекций непосредственно из кода .Net.
- Язык объектных запросов
- QBE ( Query By Example ), созданный Moshè Zloof, IBM 1977
- QUEL, представленный в 1974 году проектом UC Berkeley Ingres, ближе к реляционному исчислению кортежей, чем SQL
- Учебник D
- XQuery
Распределенная обработка SQL [ править ]
Архитектура распределенной реляционной базы данных (DRDA) была разработана рабочей группой IBM с 1988 по 1994 год. DRDA позволяет реляционным базам данных, подключенным к сети, взаимодействовать друг с другом для выполнения запросов SQL. [42] [43]
Интерактивный пользователь или программа могут выдавать операторы SQL в локальную RDB и получать таблицы данных и индикаторы состояния в ответ от удаленных RDB. Операторы SQL также могут быть скомпилированы и сохранены в удаленных RDB в виде пакетов, а затем вызваны по имени пакета. Это важно для эффективной работы прикладных программ, которые выдают сложные высокочастотные запросы. Это особенно важно, когда таблицы, к которым нужно получить доступ, находятся в удаленных системах.
Сообщения, протоколы и структурные компоненты DRDA определяются архитектурой управления распределенными данными . Распределенная обработка SQL, а также DRDA, отличается от современных распределенных баз данных SQL .
Критика [ править ]
Дизайн [ править ]
SQL по-разному отличается от своей теоретической основы, реляционной модели и своего кортежного исчисления. В этой модели таблица - это набор кортежей, а в SQL таблицы и результаты запроса - это списки строк; одна и та же строка может встречаться несколько раз, и порядок строк может использоваться в запросах (например, в предложении LIMIT).
Критики утверждают, что SQL следует заменить языком, который строго возвращается к исходной основе: например, см . Третий манифест . Однако не существует известных доказательств того, что такая уникальность не может быть добавлена к самому SQL [44] или, по крайней мере, к разновидности SQL. Другими словами, вполне возможно, что SQL можно «исправить» или, по крайней мере, улучшить в этом отношении, так что отрасли, возможно, не придется переключаться на совершенно другой язык запросов для получения уникальности. Дебаты по этому поводу остаются открытыми.
Другая критика [ править ]
Чемберлин обсуждает четыре исторических критических замечания SQL в статье 2012 года: [12]
Ортогональность и полнота [ править ]
Ранние спецификации не поддерживали основные функции, такие как первичные ключи. Наборы результатов не могут быть названы, а подзапросы не определены. Они были добавлены в 1992 году. [12]
Null [ править ]
Концепция Null является предметом некоторых дискуссий . Маркер Null указывает на отсутствие значения и отличается от значения 0 для целочисленного столбца или пустой строки для текстового столбца. Концепция Nulls обеспечивает 3- значную логику в SQL , которая является конкретной реализацией общей 3-значной логики .
Дубликаты [ править ]
Еще одна популярная критика заключается в том, что он позволяет дублировать строки, что затрудняет интеграцию с такими языками, как Python , типы данных которого могут затруднять точное представление данных [12] с точки зрения синтаксического анализа и отсутствия модульности. [45]
Этого можно избежать, объявляя уникальное ограничение с одним или несколькими полями, которые однозначно идентифицируют строку в таблице. Это ограничение также может стать первичным ключом таблицы.
Несоответствие импеданса [ править ]
Подобно несоответствию объектно-реляционного импеданса , существует несоответствие между декларативным языком SQL и процедурными языками, в которые обычно встраивается SQL.
Типы данных SQL [ править ]
Стандарт SQL определяет три типа типов данных:
- предопределенные типы данных
- построенные типы
- определяемые пользователем типы.
Предопределенные типы данных [ править ]
- Типы персонажей
- Персонаж (СИМВОЛ)
- Изменение характера (VARCHAR)
- Большой объект символа (CLOB)
- Типы национальных характеров
- Национальный характер (NCHAR)
- Изменяющийся национальный характер (NCHAR VARYING)
- Большой объект национального характера (NCLOB)
- Бинарные типы
- Двоичный (BINARY)
- Двоичное варьирование (VARBINARY)
- Большой двоичный объект (BLOB)
- Числовые типы
- Точные числовые типы (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
- Приблизительные числовые типы (FLOAT, REAL, DOUBLE PRECISION)
- Десятичный тип с плавающей запятой (DECFLOAT)
- Типы даты и времени (DATE, TIME, TIMESTAMP)
- Тип интервала (ИНТЕРВАЛ)
- Логический
- XML
- JSON
Сконструированные типы [ править ]
Сконструированные типы - это ARRAY, MULTISET, REF (erence) или ROW.
Определяемые пользователем типы сопоставимы с классами объектно-ориентированного языка со своими собственными конструкторами, наблюдателями, мутаторами, методами, наследованием, перегрузкой, перезаписью, интерфейсами и т. Д.
См. Также [ править ]
- Викибук SQL
- База данных объектов
- Список систем управления реляционными базами данных
- Сравнение систем управления реляционными базами данных
- Сравнение объектно-реляционных систем управления базами данных
- D (спецификация языка данных)
- D4 (язык программирования)
- Запрос по примеру
- Синтаксис SQL
- Oracle PL / SQL
- Microsoft Transact-SQL (T-SQL)
- Обработка онлайн-транзакций (OLTP)
- Онлайн-аналитическая обработка (OLAP)
- Хранилище данных
- Система управления реляционными потоками данных
- NoSQL
- Швабры
- Иерархическая модель
- Схема звездочки
- Схема снежинки
Заметки [ править ]
- ^ Формально, операторы "SQL-данные" за исключением операторов "изменения SQL-данных"; это в первую очередьоператор Select .
- ^ Формально, операторы «SQL-схемы».
- ^ Формально, операторы "изменения данных SQL"
Ссылки [ править ]
- ^ Пол, Райан. «Экскурсия по командной оболочке Microsoft» . Ars Technica . Проверено 10 апреля 2011 года .
- ^ "Регистрация типа носителя для приложения / sql" . Управление по присвоению номеров в Интернете . 10 апреля 2013 . Проверено 10 апреля 2013 года .
- ^ "Тип носителя application / sql, RFC 6922" . Инженерная группа Интернета . Апрель 2013. с. 3 . Проверено 10 апреля 2013 года .
- ↑ Болье, Алан (апрель 2009 г.). Мэри Е. Треселер (ред.). Изучение SQL (2-е изд.). Севастополь, Калифорния, США: О'Рейли. ISBN 978-0-596-52083-0.
- ^ Чемберлин, Дональд Д. (2001-10-03). «Устное интервью истории с Дональдом Д. Чемберлином» . Проверено 14 января 2020 .
Мы изменили первоначальное имя «SEQUEL» на SQL, потому что получили письмо от чьего-то юриста, в котором говорилось, что имя «SEQUEL» принадлежит им.
Мы сократили его до SQL (язык структурированных запросов), а продукт был известен как SQL / DS.
- ^ SQL-92 , 4.22 SQL-операторы, 4.22.1 Классы SQL-операторов "Существует не менее пяти способов классификации SQL-операторов:", 4.22.2, SQL-операторы, классифицируемые по функциям "Ниже приведены основные классы SQL-операторы: "; SQL: 2003 4.11 SQL-операторы и более поздние версии.
- Перейти ↑ Chatham, Mark (2012). Структурированный язык запросов на примере - Том I: Язык запросов данных . п. 8 . ISBN 978-1-29119951-2.
- ↑ Кодд, Эдгар Ф. (июнь 1970 г.). «Реляционная модель данных для больших общих банков данных». Коммуникации ACM . 13 (6): 377–87. CiteSeerX 10.1.1.88.646 . DOI : 10.1145 / 362384.362685 . S2CID 207549016 .
- ^ а б Чаппл, Майк. «Основы SQL» . Базы данных . About.com . Проверено 28 января 2009 .
- ^ «Язык структурированных запросов (SQL)» . Международные Бизнес Машины. 27 октября 2006 . Проверено 10 июня 2007 .
- ^ a b «ISO 9075: 1987: Информационные технологии - Языки баз данных - SQL - Часть 1: Framework (SQL / Framework)» . 1987-06-01.
- ^ Б с д е е Чемберлин, Donald (2012). «Ранняя история SQL». IEEE Annals of the History of Computing . 34 (4): 78–82. DOI : 10.1109 / MAHC.2012.61 . S2CID 1322572 .
- ^ a b c Чемберлин, Дональд Д.; Бойс, Раймонд Ф (1974). «ПОСЛЕДОВАТЕЛЬНОСТЬ: структурированный английский язык запросов» (PDF) . Материалы семинара ACM SIGFIDET 1974 г. по описанию, доступу и контролю данных . Ассоциация вычислительной техники: 249–64. Архивировано из оригинального (PDF) 26 сентября 2007 года . Проверено 9 июня 2007 .
- ^ a b Оппель, Энди (27 февраля 2004 г.). Демистификация баз данных . Сан-Франциско, Калифорния : McGraw-Hill Osborne Media. С. 90–1. ISBN 978-0-07-146960-9.
- ^ «История IBM, 1978» . Архивы IBM . IBM . Проверено 9 июня 2007 .
- ^ «ISO - ISO / IEC JTC 1 / SC 32 - Управление данными и обмен» . www.iso.org . Проверено 2 января 2021 года .
- ^ Международный стандарт ANSI / ISO / IEC (IS). Язык баз данных SQL - Часть 2: Основа (SQL / Foundation). 1999 г.
- ^ «IBM PureData System for Analytics, версия 7.0.3» .
- ^ "Invantive процедурный SQL" .
- ^ «СОЗДАТЬ ПРОЦЕДУРУ» . База знаний MariaDB . Проверено 23 апреля 2019 .
- ^ Авторы PostgreSQL (2011). «Серверное программирование PostgreSQL» . Официальная документация PostgreSQL 9.1 . postgresql.org . Проверено 9 марта 2012 .
- ^ Авторы PostgreSQL (2012). «О PostgreSQL» . Официальный сайт PostgreSQL 9.1 . Группа глобального развития PostgreSQL . Проверено 9 марта 2012 года .
PostgreSQL гордится соблюдением стандартов.
Его реализация SQL полностью соответствует стандарту ANSI-SQL: 2008.
- ^ «Mimer SQL, построенный на стандартах» . Официальный сайт Mimer SQL . Информационные технологии Mimer. 2009 г.
- ^ «4.1. Лексическая структура» . Документация PostgreSQL . 2018.
- ^ "(Второй проект неофициального обзора) ISO / IEC 9075: 1992, Язык баз данных SQL, раздел 5.2, правило синтаксиса 11" . 30 июля 1992 г.
- ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Германн; Белламконда, Шрикантх (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных» . Справочник по языку SQL Oracle Database 11g, выпуск 2 (11.2) . Библиотека документации Oracle Database. Redwood City, CA: Oracle USA, Inc . Проверено 29 декабря 2010 года .
Для каждого
значения Oracle хранит следующую информацию: век, год, месяц, число, час, минута и секунда.
DATE
- ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Германн; Белламконда, Шрикантх (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных» . Справочник по языку SQL Oracle Database 11g, выпуск 2 (11.2) . Библиотека документации Oracle Database. Redwood City, CA: Oracle USA, Inc . Проверено 29 декабря 2010 года .
Типы данных datetime
...
DATE
- ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Германн; Белламконда, Шрикантх (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных» . Справочник по языку SQL Oracle Database 11g, выпуск 2 (11.2) . Библиотека документации Oracle Database. Redwood City, CA: Oracle USA, Inc . Проверено 29 декабря 2010 года .
Не определяйте столбцы со следующими типами данных SQL / DS и DB2, поскольку они не имеют соответствующего типа данных Oracle: ...
TIME
- ^ "Помощь" . X3H2 Records, 1978–95 . Американский национальный институт стандартов.
- ↑ Doll, Shelley (19 июня 2002 г.). "Является ли SQL более стандартным?" . Builder.com от TechRepublic . TechRepublic. Архивировано из оригинала на 2012-07-05 . Проверено 12 апреля 2016 .
- ^ a b Гиллеспи, Патрик. «Произношение SQL: SQL или продолжение?» . Проверено 12 февраля 2012 года .
- ^ Мелтон, Джим; Алан Р. Саймон (1993). «1.2. Что такое SQL?» . Понимание нового SQL: полное руководство . Морган Кауфманн. п. 536 . ISBN 978-1-55860-245-8.
SQL (правильно произносится «ess cue ell» вместо довольно распространенного «сиквела») ...
- ^ a b Вагнер, Майкл (2010). SQL / XML: 2006 - Оценка стандартной конфигурации с использованием Datenbanksysteme . Diplomica Verlag. п. 100. ISBN 978-3-8366-9609-8.
- ^ «SQL: 2008 теперь утвержденный международный стандарт ISO» . Sybase. Июль 2008. Архивировано из оригинала на 2011-06-28.
- ↑ Кришна Кулкарни, Ян-Эйке Михельс (сентябрь 2012 г.). «Временные особенности в SQL: 2011» (PDF) . Запись SIGMOD . 41 (3).
- ^ Фред Земке (2012). «Что нового в SQL: 2011» (PDF) . Корпорация Oracle.
- ^ «ISO / IEC 9075-2: 2016: Информационные технологии - Языки баз данных - SQL - Часть 2: Foundation (SQL / Foundation)» . Декабрь 2016 г.
- ^ SQL: 2008 черновик (Zip) , Whitemarsh Information Systems Corporation
- ^ «ISO / IEC 9075-1: 2016: Информационные технологии - Языки баз данных - SQL - Часть 1: Framework (SQL / Framework)» .
- ^ ISO / IEC 9075-11: 2008: Схемы информации и определений (SQL / Schemata)
- ^ Фернандо Саенс-Перес. «Внешние соединения в дедуктивной системе баз данных» (PDF) . Lbd.udc.es . Проверено 16 января 2017 .
- ^ Reinsch, R. (1988). «Распределенная база данных для SAA». IBM Systems Journal . 27 (3): 362–389. DOI : 10.1147 / sj.273.0362 .
- ^ Справочник по архитектуре распределенной реляционной базы данных . IBM Corp. SC26-4651-0. 1990 г.
- ^ "Khan Academy | Бесплатные онлайн-курсы, уроки и практика" . Ханская академия . Проверено 29 мая 2020 .
- ^ Шаудер, Джен. «Почему SQL - отстой» . Schauderhaft . Проверено 3 февраля 2018 .
Источники [ править ]
- Кодд, Эдгар Ф (июнь 1970 г.). «Реляционная модель данных для больших общих банков данных» . Коммуникации ACM . 13 (6): 377–87. DOI : 10.1145 / 362384.362685 . S2CID 207549016 . Архивировано из оригинала на 2007-06-12.
- Обсуждение предполагаемых недостатков SQL (C2 wiki)
- CJ Date с Хью Дарвеном : Руководство по стандарту SQL: руководство пользователя по стандартному языку баз данных SQL, 4-е изд. , Аддисон Уэсли, США 1997, ISBN 978-0-201-96426-4
Документы стандартов SQL [ править ]
Общедоступные стандарты и технические отчеты ITTF [ править ]
ISO / IEC Информационные технологии Целевая группа публикует общедоступные стандарты , включая SQL. Здесь публикуются Технические исправления (исправления) и Технические отчеты (документы для обсуждения).
SQL - Часть 1: Фреймворк (SQL / Framework)
Черновики документов [ править ]
Официальные стандарты SQL доступны в ISO и ANSI за дополнительную плату. Для информативного использования, в отличие от строгого соблюдения стандартов, часто бывает достаточно поздних черновиков.
- SQL: проект 2011 г.
- Проект SQL-92
Внешние ссылки [ править ]
- 1995 Воссоединение SQL: Люди, проекты и политика , Пол МакДжонс (ред.) : Стенограмма встречи, посвященной личной истории реляционных баз данных и SQL.
- Американский национальный институт стандартов. X3H2 Records, 1978–1995 Коллекция Института Чарльза Бэббиджа документирует разработку комитетом H2 стандартов NDL и SQL.
- Устное историческое интервью с Дональдом Д. Чемберлином Институт Чарльза Бэббиджа В этой устной истории Чемберлин рассказывает о своей ранней жизни, своем образовании в колледже Харви Мадда и Стэнфордском университете , а также о своей работе над технологией реляционных баз данных. Чемберлин был членом исследовательской группы System R и вместе с Раймондом Ф. Бойсом разработал язык баз данных SQL. Чемберлин также кратко обсуждает свои недавние исследования языков запросов XML.
- Сравнение различных реализаций SQL Это сравнение различных реализаций SQL призвано служить руководством для тех, кто заинтересован в переносе кода SQL между различными продуктами СУБД, и включает сравнения между SQL: 2008, PostgreSQL, DB2, MS SQL Server, MySQL, Oracle, и Informix.
- Обработка потока событий с помощью SQL - Введение в обработку потоковых данных в реальном времени с помощью непрерывных SQL-запросов.
- Грамматика BNF для ISO / IEC 9075: 2003, часть 2 SQL / Framework