WikiDer > SQL
Парадигма | Декларативная |
---|---|
Семья | Язык запроса |
Разработано | Дональд Д. Чемберлин Раймонд Ф. Бойс |
Разработчик | 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 (/ˌɛsˌkjuːˈɛл/ (Слушать) S-Q-L,[4] /ˈsяkшəl/ «продолжение»; Структурированный язык запросов)[5][6][7] это предметно-ориентированный язык используется в программировании и предназначен для управления данными, хранящимися в система управления реляционной базой данных (СУБД) или для потоковой обработки в система управления реляционными потоками данных (RDSMS). Это особенно полезно при обращении с структурированные данные, т.е. данные, включающие отношения между сущностями и переменными.
SQL предлагает два основных преимущества по сравнению с более ранними версиями чтения-записи API Такие как ISAM или же VSAM. Во-первых, он представил концепцию доступа к множеству записей с помощью одной единственной команды. Во-вторых, это избавляет от необходимости указывать как для достижения рекорда, например с или без индекс.
Первоначально на основе реляционная алгебра и кортежное реляционное исчисление, SQL состоит из множества типов операторов,[8] которые можно неофициально классифицировать как подъязыки, обычно: a язык запросов данных (DQL),[а] а язык определения данных (DDL),[b] а язык управления данными (DCL) и язык обработки данных (DML).[c][9] Объем SQL включает запрос данных, манипулирование данными (вставка, обновление и удаление), определение данных (схема создание и изменение), а также контроль доступа к данным. Хотя SQL по сути декларативный язык (4GL), он также включает процедурный элементы.
SQL был одним из первых коммерческих языков, в которых использовались Эдгар Ф. КоддС реляционная модель. Модель была описана в его влиятельной статье 1970 года «Реляционная модель данных для больших общих банков данных».[10] Несмотря на то, что не полностью придерживается реляционная модель, описанная Коддом, он стал наиболее широко используемым языком баз данных.[11][12]
SQL стал стандарт из Американский национальный институт стандартов (ANSI) в 1986 г., а Международная организация по стандартизации (ISO) в 1987 году.[13] С тех пор стандарт был пересмотрен, чтобы включить в него более широкий набор функций. Несмотря на наличие стандартов, большая часть кода SQL требует по крайней мере некоторых изменений перед переносом в другие системы баз данных.
История
Изначально SQL был разработан в IBM к Дональд Д. Чемберлин и Раймонд Ф. Бойс узнав о реляционной модели от Эдгар Ф. Кодд[14] в начале 1970-х гг.[15] Эта версия, первоначально называвшаяся Продолжение (Структурированный английский язык запросов), был разработан для управления и извлечения данных, хранящихся в IBMоригинальная квазиреляционная система управления базами данных, Система R, которая группа в Исследовательская лаборатория IBM в Сан-Хосе были разработаны в течение 1970-х годов.[15]
Первой попыткой Чемберлина и Бойса создать язык реляционных баз данных был Square, но его было трудно использовать из-за записи нижнего индекса. После перехода в исследовательскую лабораторию Сан-Хосе в 1973 году они начали работу над SEQUEL.[14] Акроним SEQUEL позже был изменен на SQL, поскольку SEQUEL был товарный знак из В Великобритании Хоукер Сиддели Компания Dynamics Engineering Limited.[16]
После тестирования SQL на тестовых сайтах заказчиков для определения полезности и практичности системы IBM приступила к разработке коммерческих продуктов на основе своего прототипа System R, включая Система / 38, SQL / DS, и DB2, которые были коммерчески доступны в 1979, 1981 и 1983 годах соответственно.[17]
В конце 1970-х годов Relational Software, Inc. (ныне Корпорация Oracle) увидели потенциал концепций, описанных Коддом, Чемберлином и Бойсом, и разработали свой собственный СУБД со стремлением продать его ВМС США, Центральное Разведывательное Управление, и другие правительство США агентства. В июне 1979 года компания Relational Software, Inc. представила первую коммерчески доступную реализацию SQL, Oracle V2 (Version2) для VAX компьютеры.
К 1986 г. ANSI и ISO Стандартные группы официально приняли стандартное определение языка «Язык баз данных SQL». Новые версии стандарта были опубликованы в 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011 годах.[14] и совсем недавно в 2016 году.[нужна цитата]
Синтаксис
Язык SQL подразделяется на несколько языковых элементов, в том числе:
- Статьи, которые являются составными компонентами операторов и запросов. (В некоторых случаях это необязательно.)[18]
- Выражения, который может производить либо скаляр значения, или столы состоящий из столбцы и ряды данных
- Предикаты, которые определяют условия, которые могут быть оценены в SQL трехзначная логика (3VL) (истина / ложь / неизвестно) или Булево ценности истины и используются для ограничения эффектов операторов и запросов или для изменения выполнения программы.
- Запросы, которые получают данные на основе определенных критериев. Это важный элемент SQL.
- Заявления, который может иметь постоянное влияние на схемы и данные или может управлять сделки, поток программы, соединения, сеансы или диагностика.
- Операторы SQL также включают точка с запятой (";") терминатор оператора. Хотя он не требуется на каждой платформе, он определен как стандартная часть грамматики SQL.
- Незначительные пробелы обычно игнорируется в операторах SQL и запросах, что упрощает форматирование кода SQL для удобства чтения.
Процедурные расширения
SQL разработан для конкретной цели: для запроса данные содержится в реляционная база данных. SQL - это набор-основан, декларативный язык программирования, а не императивный язык программирования подобно C или же БАЗОВЫЙ. Однако расширения Standard SQL добавляют процедурный язык программирования функциональные возможности, такие как конструкции управления потоком. К ним относятся:
Источник | Сокращение | Полное имя |
---|---|---|
Стандарт ANSI / ISO | SQL / PSM | Модули SQL / Persistent Stored |
Interbase / Жар-птица | PSQL | Процедурный SQL |
IBM DB2 | SQL PL | Процедурный язык SQL (реализует SQL / PSM) |
IBM Informix | SPL | Сохраненный процедурный язык |
IBM Netezza | NZPLSQL[19] | (на основе Postgres PL / pgSQL) |
Изобретательный | PSQL[20] | Invantive Procedural SQL (реализует SQL / PSM и PL / SQL) |
MariaDB | SQL / PSM, PL / SQL | SQL / Persistent Stored Module (реализует SQL / PSM), процедурный язык / SQL (на основе Ада)[21] |
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 (на основе Ада) |
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) для поддержки Ява код в базах данных SQL. Microsoft SQL Server 2005 использует SQLCLR (SQL Server Common Language Runtime) для размещения управляемого .СЕТЬ сборки в базе данных, тогда как предыдущие версии SQL Server были ограничены неуправляемыми расширенными хранимыми процедурами, в основном написанными на C. PostgreSQL позволяет пользователям писать функции на самых разных языках, включая Perl, Python, Tcl, JavaScript (PL / V8) и С.[22]
Совместимость и стандартизация
Обзор
Реализации SQL несовместимы между поставщиками и не обязательно полностью соответствуют стандартам. В частности, синтаксис даты и времени, конкатенация строк, НОЛЬ
s, и сравнение чувствительность к регистру варьироваться от поставщика к поставщику. Особые исключения: PostgreSQL[23] и Mimer SQL[24] которые стремятся к соответствию стандартам, хотя PostgreSQL не придерживается стандарта в том, как выполняется сворачивание имен без кавычек. Сворачивание имен без кавычек в нижний регистр в PostgreSQL несовместимо со стандартом SQL,[25] который говорит, что имена без кавычек должны быть загнуты в верхний регистр.[26] Таким образом, Фу
должен быть эквивалентен FOO
нет фу
по стандарту.
Популярные реализации SQL обычно не поддерживают базовые функции стандартного SQL, такие как ДАТА
или же ВРЕМЯ
типы данных. Наиболее очевидными из таких примеров и, кстати, наиболее популярными коммерческими и проприетарными СУБД SQL являются Oracle (чья ДАТА
ведет себя как ДАТА ВРЕМЯ
,[27][28] и не хватает ВРЕМЯ
тип)[29] и MS SQL Server (до версии 2008). В результате код SQL редко может быть перенесен между системами баз данных без изменений.
Причины несовместимости
Отсутствие переносимости между системами баз данных объясняется несколькими причинами:
- Сложность и размер стандарта SQL означает, что большинство разработчиков не поддерживают весь стандарт.
- Стандарт не определяет поведение базы данных в нескольких важных областях (например, индексы, файловое хранилище ...), оставляя реализации решать, как себя вести.
- Стандарт SQL точно определяет синтаксис, который должна реализовать соответствующая система баз данных. Однако стандартная спецификация семантики языковых конструкций менее четко определена, что приводит к двусмысленности.
- Многие поставщики баз данных имеют большие существующие клиентские базы; там, где более новая версия стандарта SQL конфликтует с предыдущим поведением базы данных поставщика, поставщик может не захотеть нарушить Обратная совместимость.
- У поставщиков мало коммерческих стимулов, чтобы облегчить пользователям смену поставщиков баз данных (см. привязка к поставщику).
- Пользователи, оценивающие программное обеспечение баз данных, обычно ставят другие факторы, такие как производительность, выше в свои приоритеты, чем соответствие стандартам.
История стандартизации
SQL был принят в качестве стандарта Американский национальный институт стандартов (ANSI) в 1986 году как SQL-86[30] и Международная организация по стандартизации (ISO) в 1987 году.[13] Он поддерживается ISO / IEC JTC 1, Информационные технологии, Подкомитет SC 32, Управление данными и обмен.
До 1996 г. Национальный институт стандартов и технологий Программа стандартов управления данными (NIST) подтвердила соответствие СУБД SQL стандарту SQL. Поставщики теперь самостоятельно подтверждают соответствие своей продукции.[31]
В исходном стандарте говорилось, что официальное произношение «SQL» было инициализм: /ˌɛsˌkjuːˈɛл/ ("ess cue el").[11] Тем не менее, многие англоговорящие специалисты по базам данных (включая Дональд Чемберлин сам[32]) использовать акроним-подобное произношение /ˈsяkшəl/ ("продолжение"),[33] отражение названия предварительной версии языка, «SEQUEL».[15][16][32]
Стандарт 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-документам.[34] | |
2008 | SQL: 2008 | Легализует определения ORDER BY за пределами курсора. Добавляет триггеры INSTEAD OF, оператор TRUNCATE,[35] Предложение FETCH. | |
2011 | SQL: 2011 | Добавляет временные данные (ПЕРИОД ДЛЯ)[36] (дополнительная информация по адресу: Временная база данных # История). Улучшения для оконные функции и предложение FETCH.[37] | |
2016 | SQL: 2016 | Добавляет сопоставление с образцом строк, полиморфные табличные функции, JSON. | |
2019 | SQL: 2019 | Добавляет Часть 15, многомерные массивы (тип и операторы MDarray). |
Текущий стандарт
Стандарт обычно обозначается рисунком: ISO / IEC 9075-n: гггг Часть n: название, или, как ярлык, ISO / IEC 9075.
ISO / IEC 9075 дополняется ISO / IEC 13249: мультимедийные и прикладные пакеты SQL (SQL / MM), который определяет интерфейсы и пакеты на основе SQL для широко распространенных приложений, таких как видео, аудио и пространственные данные. Заинтересованные стороны могут приобрести документы стандартов SQL в ISO,[38] IEC или ANSI. Черновик SQL: 2008 доступен бесплатно как застегивать архив.[39]
Анатомия стандарта SQL
Стандарт SQL разделен на десять частей. Имеются пробелы в нумерации из-за вывода устаревших деталей.
- ISO / IEC 9075-1: 2016 Часть 1: Рамки (SQL / Framework). Он предоставляет логические концепции.[40]
- ИСО / МЭК 9075-2: 2016 Часть 2: Фонд (SQL / Foundation). Он содержит наиболее важные элементы языка и состоит из обоих обязательный и необязательный Особенности.
- ИСО / МЭК 9075-3: 2016 Часть 3: Интерфейс уровня вызовов (SQL / CLI). Он определяет компоненты интерфейса (структуры, процедуры, привязки переменных), которые могут использоваться для выполнения операторов SQL из приложений, написанных на Ada, C соответственно C ++, COBOL, Fortran, MUMPS, Pascal или PL / I. (Для Java см. Часть 10.) SQL / CLI определен таким образом, что операторы SQL и вызовы процедур SQL / CLI обрабатываются отдельно от исходного кода вызывающего приложения. Открытое подключение к базе данных - это хорошо известный надмножество SQL / CLI. Эта часть стандарта состоит исключительно из обязательный Особенности.
- ИСО / МЭК 9075-4: 2016, часть 4: Постоянно хранимые модули (SQL / PSM). Он стандартизирует процедурные расширения для SQL, включая поток управления, обработку условий, сигналы условий оператора и отмены, курсоры и локальные переменные, а также присвоение выражений переменным и параметрам. Кроме того, SQL / PSM формализует объявление и обслуживание постоянных языковых подпрограмм (например, «хранимых процедур»). Эта часть стандарта состоит исключительно из необязательный Особенности.
- ИСО / МЭК 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 / схемы). Он определяет информационную схему и схему определения, предоставляя общий набор инструментов для самоописания баз данных и объектов SQL. Эти инструменты включают идентификатор объекта SQL, ограничения структуры и целостности, спецификации безопасности и авторизации, функции и пакеты ISO / IEC 9075, поддержку функций, предоставляемых реализациями СУБД на основе SQL, информацию о реализации СУБД на основе SQL и элементы определения размеров, а также значения, поддерживаемые реализациями СУБД.[41] Эта часть стандарта содержит как обязательный и необязательный Особенности.
- ИСО / МЭК 9075-13: 2016, часть 13: Подпрограммы и типы SQL с использованием языка программирования Java TM (SQL / JRT). Он определяет возможность вызывать статические методы Java как подпрограммы из приложений SQL («Java-in-the-database»). Это также требует возможности использовать классы Java в качестве структурированных пользователем типов SQL. Эта часть стандарта состоит исключительно из необязательный Особенности.
- ИСО / МЭК 9075-14: 2016, часть 14: Спецификации, связанные с XML (SQL / XML). Он определяет расширения на основе SQL для использования XML в сочетании с SQL. В XML представлен тип данных, а также несколько процедур, функций и сопоставлений типов данных XML-SQL для поддержки обработки и хранения XML в базе данных SQL.[34] Эта часть стандарта состоит исключительно из необязательный Особенности.[нужна цитата]
- ИСО / МЭК 9075-15: 2019, часть 15: Многомерные массивы (SQL / MDA). Он определяет тип многомерного массива (MDarray) для SQL, а также операции с MDarrays, срезами MDarray, ячейками MDarray и связанными функциями. Эта часть стандарта состоит исключительно из необязательный Особенности.
Расширения стандарта ISO / IEC
ISO / IEC 9075 дополняется ISO / IEC 13249 Мультимедиа SQL и пакеты приложений. Этот тесно связанный, но отдельный стандарт разработан тем же комитетом. Он определяет интерфейсы и пакеты на основе SQL. Целью является унифицированный доступ к типичным приложениям баз данных, таким как текст, изображения, интеллектуальный анализ данных или пространственные данные.
- ИСО / МЭК 13249-1: 2016 Часть 1: Рамки
- ИСО / МЭК 13249-2: 2003 Часть 2: Полный текст
- ИСО / МЭК 13249-3: 2016 Часть 3: Пространственный
- ИСО / МЭК 13249-5: 2003 Часть 5: Неподвижное изображение
- ИСО / МЭК 13249-6: 2006 Часть 6: Сбор данных
- ИСО / МЭК 13249-7: 2013 Часть 7: История
- ИСО / МЭК 13249-8: xxxx, часть 8: Доступ к реестру метаданных MRA (работа в процессе)
Технические отчеты
ISO / IEC 9075 также сопровождается серией технических отчетов, опубликованных как ISO / IEC TR 19075 в 8 частях. В этих технических отчетах объясняется обоснование и использование некоторых функций 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)
Альтернативы
Следует проводить различие между альтернативами SQL как языку и альтернативами самой реляционной модели. Ниже предлагаются реляционные альтернативы языку SQL. Видеть навигационная база данных и NoSQL для альтернатив реляционной модели.
- .QL: объектно-ориентированный журнал данных
- 4D язык запросов (4D QL)
- Лог данных: критики предполагают, что Лог данных имеет два преимущества перед SQL: он имеет более чистую семантику, которая облегчает понимание и обслуживание программ, и более выразительна, особенно для рекурсивных запросов.[42]
- HTSQL: Метод запроса на основе URL
- IBM Business System 12 (IBM BS12): одна из первых полностью реляционных систем управления базами данных, представленная в 1982 году.
- ISBL
- jOOQ: SQL реализован в Java как внутренний предметно-ориентированный язык
- Язык запросов сохраняемости Java (JPQL): язык запросов, используемый Java Persistence API и Спящий режим библиотека сохраняемости
- JavaScript: MongoDB реализует свой язык запросов в API JavaScript.
- LINQ: Запускает операторы SQL, написанные как языковые конструкции, для запроса коллекций непосредственно изнутри .Сеть код.
- Язык объектных запросов
- QBE (Запрос по примеру), созданный Моше Злоофом, IBM 1977 г.
- Quel введен в 1974 г. U.C. Проект Berkeley Ingres.
- Учебник D
- XQuery
Распределенная обработка SQL
Распределенная архитектура реляционной базы данных (DRDA) был разработан рабочей группой IBM в период с 1988 по 1994 год. DRDA позволяет реляционным базам данных, подключенным к сети, взаимодействовать друг с другом для выполнения запросов SQL.[43][44]
Интерактивный пользователь или программа могут выдавать операторы SQL в локальную RDB и получать таблицы данных и индикаторы состояния в ответ от удаленных RDB. Операторы SQL также могут быть скомпилированы и сохранены в удаленных RDB как пакеты, а затем вызваны по имени пакета. Это важно для эффективной работы прикладных программ, которые выдают сложные высокочастотные запросы. Это особенно важно, когда таблицы, к которым нужно получить доступ, находятся в удаленных системах.
Сообщения, протоколы и структурные компоненты DRDA определяются Распределенная архитектура управления данными.
Критика
Дизайн
SQL по-разному отклоняется от своей теоретической основы. реляционная модель и это кортежное исчисление. В этой модели стол - это набор кортежей, а в SQL таблицы и результаты запросов списки of rows: одна и та же строка может встречаться несколько раз, и порядок строк может использоваться в запросах (например, в предложении LIMIT).
Критики утверждают, что SQL следует заменить языком, который строго возвращается к исходной основе: например, см. Третий манифест. Однако не существует никаких известных доказательств того, что такую уникальность нельзя добавить к самому SQL,[45] или хотя бы вариант SQL. Другими словами, вполне возможно, что SQL можно «исправить» или, по крайней мере, улучшить в этом отношении, так что отрасли, возможно, не придется переключаться на совершенно другой язык запросов для получения уникальности. Дебаты по этому поводу остаются открытыми.
Другая критика
Чемберлин обсуждает четыре исторических критики SQL в статье 2012 года:[14]
Ортогональность и полнота
Ранние спецификации не поддерживали основные функции, такие как первичные ключи.Наборы результатов не могут быть названы, а подзапросы не определены. Они были добавлены в 1992 году.[14]
Ноль
Концепция чего-либо Ноль является предметом некоторых дебаты. Маркер Null указывает на отсутствие значения, даже 0 для целочисленного столбца или строки длины 0 для текстового столбца. Концепция нулевых значений требует 3-значная логика в SQL, которая является конкретной реализацией общей 3-значная логика.
Дубликаты
Еще одна популярная критика заключается в том, что он позволяет дублировать строки, обеспечивая интеграцию с такими языками, как Python, чьи типы данных могут затруднить точное представление данных,[14] сложен с точки зрения парсинга и отсутствия модульности.[46]
Этого можно избежать, объявляя уникальное ограничение с одним или несколькими полями, которые однозначно идентифицируют строку в таблице. Это ограничение также может стать первичным ключом таблицы.
Несоответствие импеданса
В том же смысле, что и Несоответствие объектно-реляционного импеданса, существует несоответствие между декларативным языком SQL и процедурными языками, в которые обычно встраивается SQL.
Категории целостности данных
Основные категории целостности данных каждой СУБД.
Целостность сущности
Устанавливает, что в таблице первичный ключ имеет уникальное значение для каждой строки, проверяя уникальность значения первичного ключа, избегая дублирования строк в таблице.
Целостность домена
Ограничивает тип, формат и диапазон значений, которые применяются к допустимым записям для столбца в таблице.
Ссылочная целостность
Делает строки в таблице, которые используются другими записями, невозможными для удаления
Определенная пользователем целостность
Применяются другие особые правила, не указанные выше.
Типы данных SQL
Стандарт SQL определяет три типа типов данных:
- предопределенные типы данных
- построенные типы
- определяемые пользователем типы.
Предопределенные типы данных
- Типы персонажей
- Символ (СИМВОЛ)
- Изменение характера (VARCHAR)
- Большой объект персонажа (CLOB)
- Двоичные типы
- Двоичный (BINARY)
- Двоичное изменение (VARBINARY)
- Двоичный большой объект (BLOB)
- Числовые типы
- Точные числовые типы (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
- Приблизительные числовые типы (FLOAT, REAL, DOUBLE PRECISION)
- Типы даты и времени (DATE, TIME, TIMESTAMP)
- Тип интервала (ИНТЕРВАЛ)
- Булево
- XML
- JSON
Построенные типы
Построенные типы являются одним из ARRAY, MULTISET, REF (erence) или ROW.
Типы, определяемые пользователем сопоставимы с классами объектно-ориентированного языка со своими собственными конструкторами, наблюдателями, мутаторами, методами, наследованием, перегрузкой, перезаписью, интерфейсами и т. д.
Смотрите также
- Реляционная база данных
- База данных объектов
- Объектно-реляционная база данных
- Список систем управления реляционными базами данных
- Сравнение систем управления реляционными базами данных
- Сравнение систем управления объектно-реляционными базами данных
- D (спецификация языка данных)
- D4 (язык программирования)
- Запрос по примеру
- Синтаксис SQL
- Oracle PL / SQL
- Microsoft Transact-SQL (T-SQL)
- Обработка онлайн-транзакций (OLTP)
- Онлайн-аналитическая обработка (OLAP)
- Хранилище данных
- Система управления реляционными потоками данных
- NoSQL
- МАМПЫ
- Иерархическая модель
- Схема звездочки
- Схема снежинки
Примечания
Рекомендации
- ^ Пол, Райан. «Экскурсия по командной оболочке 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.
- ^ «SQL». Britannica.com. Получено 2013-04-02.
- ^ "SQL". Oxford Commandaries.com. Получено 2017-01-16.
- ^ «Язык структурированных запросов (SQL)». Msdn.microsoft.com. Получено 2017-01-16.
- ^ SQL-92, 4.22 SQL-операторы, 4.22.1 Классы SQL-операторов "Существует не менее пяти способов классификации SQL-операторов:", 4.22.2, SQL-операторы, классифицируемые по функциям "Ниже приведены основные классы SQL-операторов: "; SQL: 2003 4.11 SQL-операторы и более поздние версии.
- ^ Чатем, Марк (2012). Пример структурированного языка запросов - Том I: Язык запросов данных. п.8. ISBN 978-1-29119951-2.
- ^ Кодд, Эдгар Ф. (июнь 1970 г.). «Реляционная модель данных для больших общих банков данных». Коммуникации ACM. 13 (6): 377–87. CiteSeerX 10.1.1.88.646. Дои:10.1145/362384.362685.
- ^ а б Чаппл, Майк. «Основы SQL». Базы данных. About.com. Получено 2009-01-28.
- ^ «Язык структурированных запросов (SQL)». Международные Бизнес Машины. 27 октября 2006 г.. Получено 2007-06-10.
- ^ а б «ISO 9075: 1987: Информационные технологии - Языки баз данных - SQL - Часть 1: Framework (SQL / Framework)». 1987-06-01.
- ^ а б c d е ж Чемберлин, Дональд (2012). «Ранняя история SQL». IEEE Annals of the History of Computing. 34 (4): 78–82. Дои:10.1109 / MAHC.2012.61.
- ^ а б c Чемберлин, Дональд Д. Бойс, Раймонд Ф (1974). «SEQUEL: структурированный английский язык запросов» (PDF). Материалы семинара ACM SIGFIDET 1974 года по описанию, доступу и контролю данных. Ассоциация вычислительной техники: 249–64. Архивировано из оригинал (PDF) на 2007-09-26. Получено 2007-06-09.
- ^ а б Оппель, Энди (27 февраля 2004 г.). Демистификация баз данных. Сан-Франциско, Калифорния: McGraw-Hill Osborne Media. С. 90–1. ISBN 978-0-07-146960-9.
- ^ «История IBM, 1978». Архивы IBM. IBM. Получено 2007-06-09.
- ^ Международный стандарт (IS) ANSI / ISO / IEC. Язык баз данных SQL - Часть 2: Основа (SQL / Foundation). 1999 г.
- ^ "IBM PureData System for Analytics, версия 7.0.3".
- ^ «Инвантный процедурный SQL».
- ^ «СОЗДАТЬ ПРОЦЕДУРУ». База знаний MariaDB. Получено 2019-04-23.
- ^ Участники PostgreSQL (2011 г.). "Серверное программирование PostgreSQL". Официальная документация PostgreSQL 9.1. postgresql.org. Получено 2012-03-09.
- ^ Авторы 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. Редвуд-Сити, Калифорния: Oracle USA, Inc.. Получено 29 декабря, 2010.
Для каждого
ДАТА
значение, Oracle хранит следующую информацию: век, год, месяц, число, час, минута и секунда. - ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Германн; Белламконда, Шрикантх (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных». Справочник по языку SQL Oracle Database 11g, выпуск 2 (11.2). Библиотека документации Oracle Database. Редвуд-Сити, Калифорния: Oracle USA, Inc.. Получено 29 декабря, 2010.
Типы данных datetime:
ДАТА
... - ^ Лоренц, Диана; Розер, Мэри Бет; Авраам, Сандип; Амор, Анджела; Арора, Гита; Арора, Викас; Эшдаун, Лэнс; Баер, Германн; Белламконда, Шрикантх (октябрь 2010 г.) [1996]. «Основные элементы Oracle SQL: типы данных». Справочник по языку SQL Oracle Database 11g, выпуск 2 (11.2). Библиотека документации Oracle Database. Редвуд-Сити, Калифорния: Oracle USA, Inc.. Получено 29 декабря, 2010.
Не определяйте столбцы со следующими типами данных SQL / DS и DB2, поскольку они не имеют соответствующего типа данных Oracle: ...
ВРЕМЯ
- ^ «В поисках помощи». X3H2 Records, 1978–95. Американский национальный институт стандартов.
- ^ Долл, Шелли (19 июня 2002 г.). "Является ли SQL более стандартным?". Builder.com от TechRepublic. TechRepublic. Архивировано из оригинал на 2012-07-05. Получено 2016-04-12.
- ^ а б Гиллеспи, Патрик. «Произношение SQL: S-Q-L или продолжение?». Получено 12 февраля 2012.
- ^ Мелтон, Джим; Алан Р. Саймон (1993). «1.2. Что такое SQL?». Понимание нового SQL: полное руководство. Морган Кауфманн. п.536. ISBN 978-1-55860-245-8.
SQL (правильно произносится "ess cue ell" вместо довольно распространенного "сиквела") ...
- ^ а б Вагнер, Майкл (2010). SQL / XML: 2006 - Evaluierung der Standardkonformität ausgewählter Datenbanksysteme. Diplomica Verlag. п. 100. ISBN 978-3-8366-9609-8.
- ^ «SQL: 2008 стал утвержденным международным стандартом ISO». Sybase. Июль 2008 г. Архивировано с оригинал 28 июня 2011 г.
- ^ Кришна Кулкарни, Ян-Эйке Михелс (сентябрь 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 г. (Почтовый индекс), Корпорация Whitemarsh Information Systems
- ^ «ISO / IEC 9075-1: 2016: Информационные технологии - Языки баз данных - SQL - Часть 1: Framework (SQL / Framework)».
- ^ ISO / IEC 9075-11: 2008: Информация и схемы определений (SQL / Schemata)
- ^ Фернандо Саенс-Перес. «Внешние соединения в дедуктивной системе баз данных» (PDF). Lbd.udc.es. Получено 2017-01-16.
- ^ Райнш Р. (1988). «Распределенная база данных для SAA». Журнал IBM Systems. 27 (3): 362–389. Дои:10.1147 / sj.273.0362.
- ^ Справочник по архитектуре распределенной реляционной базы данных. IBM Corp. SC26-4651-0. 1990 г.
- ^ "Khan Academy | Бесплатные онлайн-курсы, уроки и практика". Ханская академия. Получено 2020-05-29.
- ^ Шаудер, Джен. «Почему SQL - отстой». Schauderhaft. Получено 3 февраля 2018.
Источники
- Кодд, Эдгар Ф (июнь 1970 г.). «Реляционная модель данных для больших общих банков данных». Коммуникации ACM. 13 (6): 377–87. Дои:10.1145/362384.362685. Архивировано из оригинал на 2007-06-12.
- Обсуждение предполагаемых недостатков SQL (C2 вики)
- C. J. Date с Хью Дарвен: Руководство по стандарту SQL: руководство пользователя по стандартному языку баз данных SQL, 4-е изд., Аддисон Уэсли, США, 1997 г., ISBN 978-0-201-96426-4
Документы стандартов SQL
Общедоступные стандарты и технические отчеты ITTF
В ISO/IEC Целевая группа по информационным технологиям издает общедоступные стандарты включая SQL. Здесь публикуются Технические исправления (исправления) и Технические отчеты (документы для обсуждения).
SQL - Часть 1: Фреймворк (SQL / Framework)
Проекты документов
Формальные стандарты SQL доступны в ISO и ANSI за плату. Для информативного использования, в отличие от строгого соблюдения стандартов, часто бывает достаточно поздних черновиков.
внешняя ссылка
- 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