Системы обработки информации - язык баз данных SQL

         

База данных


База данных есть набор всех данных, определенных <схемами> (<schema>) в среде. Понятие среды является определяемым реализацией.



Числа


Число - это либо точное численное значение, либо приблизительное численное значение. Все числа являются сравнимыми значениями.

Каждое точное численное значение обладает точностью и масштабом. Точность - это положительное целое число, которое определяет число значащих десятичных цифр. Масштаб - это неотрицательное целое число. Масштаб 0 означает, что число является целым. При масштабе N точное численное значение есть целое значение значащих цифр, умноженное на 10 в степени N.

Приблизительные численные значения состоят из мантиссы и порядка. Мантисса - это численное значение со знаком, порядок - это целое со знаком, определяющее значимость мантиссы. Приблизительное численное значение обладает точностью. Точность это положительное целое число, определяющее число значащих двоичных цифр в мантиссе.

При присвоении точного численного значения элементу данных или параметру, представляющему точное численное значение, сохраняющее лидирующие значащие цифры приближение этого значения представляется в целевом типе данных. Значение преобразуется таким образом, чтобы получить целевые точность и масштаб.

При присвоении точного или приблизительного численного значения элементу данных или параметру, представляющим приблизительное численное значение, сохраняющее лидирующие значащие цифры приближение этого значения представляется в целевом типе данных. Значение преобразуется таким образом, чтобы получить целевую точность.



Курсоры


Курсор определяется через <объявление курсора> (<declare cursor>). Для каждого <объявления курсора> (<declare cursor>) в <модуле> (<module>) курсор фактически cоздается тогда, когда образуется транзакция (см. 4.16, "Транзакции"), ссылающаяся на этот <модуль> (<module>), и уничтожается, когда эта транзакция завершается.

Курсор находится либо в открытом состоянии, либо в закрытом состоянии. Начальное состояние курсора - закрытое. Курсор переходит в открытое состояние через <оператор открытия> (<open statement>) и возвращается в закрытое состояние через <оператор закрытия> (<close statement>), <оператор фиксации> (<commit statement>) или <оператор отката> (<rollback statement>).

Курсор в открытом состоянии определяет таблицу, порядок строк в этой таблице и позицию относительно этого порядка. Если <объявление курсора> (<declare cursor>) не включает <раздел упорядочивания> (<order by clause>) или включает <раздел упорядочивания> (<order by clause>), не полностью определяющий порядок строк, то строки в таблице имеют порядок, полностью или частично определенный в реализации.

Внутри одной транзакции, если порядок строк не определен или не полностью определен через <раздел упорядочивания> (<order by clause>), относительная позиция двух строк будет в общем случае одна и та же при каждом открытии курсора. Порядок может изменяться от одного раза к другому, если меняются значения базы данных или значения параметров, указанных в <спецификации запроса> (<query specification>) в <объявлении курсора> (<declare cursor>).

В разных транзакциях, даже когда значения базы данных и значения параметров, указанных в <спецификации запроса> (<query specification>), одинаковы, порядок строк, определяемый одинаковыми <спецификациейкурсора>(<cursor specification>) и <оператором открытия> (<open statement>), может быть различным.


Позиция курсора в открытом состоянии может быть перед определенной строкой, на определенной строке или после последней строки. Если курсор установлен на строку, то эта строка является текущей строкой курсора. Курсор может быть установлен перед первой строкой или после последней строки, даже если таблица пуста.

<Оператор чтения> (<fetch statement>) продвигает позицию открытого курсора на следующую строку в порядке этого курсора и выбирает значения столбцов этой строки. <Оператор модификации: позиционный> (<update statement: positioned>) изменяет текущую строку курсора. <Оператор удаления: позиционный> (<delete statement: positioned> удаляет текущую строку курсора.



Если курсор установлен перед некоторой строкой, и новая строка заносится в эту позицию, то оказываемое этим возможное влияние на позицию курсора, если и есть, определяется в реализации.

Если курсор установлен на некоторую строку или перед некоторой строкой, и эта строка удаляется, то курсор устанавливается перед строкой, непосредственно следующей за позицией удаленной строки. Если такая строка не существует, то курсор устанавливается после последней строки.

Если при выполнении <оператора SQL> (<SQL statement>), ссылающегося на открытый курсор, возникает ошибка, то возможное действие этого на позицию или состояние курсора определяется в реализации.

Рабочая таблица - это таблица, возникающая вследствие открытия курсора. Приводит ли открытие курсора к созданию рабочей базовой таблицы или рабочей представляемой таблицы, определяется в реализации.

Каждая строка рабочей представляемой таблицы порождается только тогда, когда курсор позиционируется на эту строку.

Рабочая базовая таблица создается при открытии курсора и уничтожается при закрытии курсора.


Множества


Множество есть неупорядоченный набор различных объектов.

Мультимножество есть неупорядоченный набор объектов, которые не обязательно различны.

Последовательность есть упорядоченный набор объектов, которые не обязательно различны.

Мощность набора есть число объектов в этом наборе. Если не оговорено противное, любой набор может быть пустым.



Модули


<Модуль> (<module>) есть долговременно хранимый объект, определенный на языке модулей. <Модуль> (<module>) состоит из необязательного <имя модуля> (<module name>), <раздела языка> (<language clause>), <раздела полномочий модуля> (<module authorization clause>), ноля или более курсоров, определенных через <объявление курсора> (<declare cursor>) и одной или более <процедур> (<procedure>).

Прикладная программа есть сегмент выполняемого кода, содержащий, возможно, несколько подпрограмм. Единственный <модуль> (<module>) ассоциируется с прикладной программой в течение ее выполнения. Прикладная программа должна быть ассоциирована с самое большее одним <модулем> (<module>). Способ установления этой ассоциации, включающий возможное требование выполнения некоторого определенного в реализации оператора, определяется в реализации.



Назначение и область применения


Этот стандарт определяет синтаксис и семантику двух языков баз данных:

Язык определения схем (SQL-DLL) для объявления структур и ограничений целостности базы данных SQL.

Язык модулей и манипулирования данными (SQL-DML) для объявления процедур базы данных и выполняемых операторов в конкретной прикладной программе базы данных.

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

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

Этот стандарт определяет два уровня и отдельное средство поддержания целостности. Уровень 2 - это полный язык баз данных SQL, не включающий средство поддержания целостности. Уровень 1 - это подмножество уровня 2, определенное в разделе 9 "Уровни" .

Замечание: Планируется дополнительный язык SQL как дополнение к этому стандарту. Основными темами, обсуждаемыми для этого приложения, являются улучшенное управление транзакциями, определение некоторых правил, объявляемых в конкретной реализации, улучшенные средства работы с символами и поддержка национальных наборов символов.

Средство поддержания целостности состоит в определении:

требуемых ограничений на ссылки между таблицами;

проверочных ограничений на строки таблицы;

значений столбца по умолчанию при занесении строки в

таблицу.

В приложениях к стандарту определяется синтаксис включения операторов манипулирования данными SQL в стандартную во всех остальных отношениях прикладную программу. Такой синтаксис определяется как сокращенная нотация для стандартной прикладной программы, в которой встроенные операторы SQL заменены явными "вызовами" процедур базы данных, содержащими операторы SQL.

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



Нотация


В качестве синтаксической нотации в этом стандарте используются БНФ ("Бэкусовские нормальные формы" или "Формы Бэкуса-Наура) со следующими расширениями:

Квадратные скобки ([]) обозначают необязательные элементы.

Многоточия (...) обозначают элементы, которые могут повторяться один или более раз.

Фигурные скобки ({ }) объединяют последовательности элементов.

В синтаксисе БНФ продукционный символ <A> определяется как содержащий продукционный символ <B>, если <B> входит в расширение <A>. Если <A> содержит <B>, то <B> содержится в <A>. Если <A> содержит <B>, то <A> является "содержащим" продукционным символом для <B>.



Ограничения целостности


Ограничения целостности определяют допустимые значения базы данных путем ограничения значений в базовых таблицах.

Ограничения целостности фактически проверяются после выполнения каждого <оператора SQL> (<SQL statement>). Если базовая таблица, ассоциированная с ограничением целостности, не удовлетворяет этому ограничению целостности, то <оператор SQL> (<SQL statement>) не выполняется, и в параметр SQLCODE устанавливается определенное в реализации отрицательное число.

<Определение ограничения уникальности> (<unique constraint definition>) требует, чтобы никакие две строки в таблице не имели одинаковых значений в указанном столбце или столбцах.

Спецификация NOT NULL требует, чтобы никакие значения в столбце не были неопределенными значениями.

<Определение ограничения ссылок> (<referential constraint definition>) требует, чтобы для каждой строки одной указанной таблицы - "ссылающейся таблицы" - значения указанного столбца или столбцов либо включали как минимум одно неопределенное значение, либо были бы такими же, как значения указанного столбца или столбцов в некоторой строке другой указанной таблицы - "ссылаемой таблицы". Ссылающаяся таблица может быть той же самой таблицей, что и ссылаемая таблица.

<Определение проверочного ограничения> (<check constraint definition>) требует, чтобы указанное <условие поиска> (<search condition>) не было ложно ни для какой строки таблицы.



Операторы


<Оператор SQL> (<SQL statement>) определяет операцию над базой данных или операцию над курсором. <Оператор выборки> (<select statement>) читает значения из таблицы. <Оператор занесения> (<insert statement>) заносит строки в таблицу. <Оператор модификации: поисковый> (<update statement: searched>) или <оператор модификации: позиционный> (<update statement: positioned>) изменяет значения строк таблицы. <Оператор удаления: поисковый> (<delete statement: searched>) или <оператор модификации: позиционный> (<delete statement: positioned>) удаляет строки из таблицы.



Организация


Этот стандарт организован следующим образом:

В , "Нотация" и , "Соглашения" определяются нотации и соглашения, используемые в этом стандарте.

В , "Соответствие" определяется критерий соответствия.

В Разделе , "Понятия" определяются термины и представляются понятия, используемые в определении SQL.

В Разделе , "Общие элементы" определяются элементы языка, встречающиеся в нескольких частях языка SQL.

В Разделе , "Язык определения схем" определяются средства SQL для определения базы данных.

В Разделе , "Язык модулей" определяются модели и процедуры SQL.

В Разделе , "Язык манипулирования данными" определяются операторы манипулирования данными SQL.

В Разделе , "Уровни" определяются два уровня SQL и средство поддержания целостности.



Параметр-индикатор


Параметр-индикатор - это целый параметр, который указывается после другого параметра. Его основное назначение - показывать, может ли значение другого параметра (принимаемого или поставляемого) быть неопределенным значением.



Параметр SQLCODE


Параметр SQLCODE - это специальный целый параметр. Его значение устанавливается равным коду состояния, который либо означает, что вызов <процедуры> (<procedure>) завершился успешно, либо, что в течение выполнения <процедуры> (<procedure>) возникла исключительная ситуация.



своего значения. Параметр либо принимает,


Параметр объявляется в <процедуре> (<procedure>) через <объявление параметра> (<parameter declaration>). <Объявление параметра> (<parameter declaration>) определяет <тип данных> (<data type>) своего значения. Параметр либо принимает, либо поставляет значение соответствующего аргумента в вызове этой <процедуры> (<procedure>).

Привилегии


Привилегия разрешаетвыполнить данную категорию <действий> (<action>) над указанной таблицей или представлением на основе указанного <идентификатора полномочий> (<authorization identifier>).Допустимыми<действиями> (<action>) являются INSERT, DELETE, SELECT, UPDATE и REFERENCES.

<Идентификатор полномочий> (<authorization identifier>) определяется для каждой <схемы> (<schema>) и <модуля> (<module>).

<Идентификатор полномочий> (<authorization identifier>), определенный для <схемы> (<schema>), должен отличаться от <идентификатора полномочий> (<authorization identifier>) любой другой <схемы> (<schema>) в той же среде. <Идентификатор полномочий> (<authorization identifier>) для <схемы> (<schema>) является "владельцем" всех таблиц и представлений, определенных в этой <схеме> (<schema>).

Таблицы и представления обозначаются <именами таблиц>

(<table name>). <Имя таблицы> (<table name>) состоит из

<идентификатора полномочий> (<authorization identifier>) и

<идентификатора> (<identifier>). <Идентификатор полномочий>

(<authorization identifier>) идентифицирует <схему>

(<schema>), в которой были определены таблица или представле-

ние, обозначаемые <именем таблицы> (<table name>). Таблицы и

представления, определенные в различных <схемах> (<schema>),

могут иметь одинаковые <идентификаторы> (<identifier>).

Если ссылка на <имя таблицы> (<table name>) не содержит явно <идентификатор полномочий> (<authorization identifier>), то по умолчанию указывается <идентификатор полномочий> (<authorization identifier>) содержащих <схемы> (<schema>) или <модуля> (<module>).

<Идентификатор полномочий> (<authorization identifier>) для <схемы> (<schema>) обладает всеми привилегиями по отношению к таблицам и представлениям, определенным в этой <схеме> (<schema>).


<Схема> (<schema>) с данным <идентификатором полномочий> (<authorization identifier>) может содержать <определения привилегий> (<privilege definition>), которые передают привилегии другим <идентификаторам полномочий> (<authorization identifier>). Переданные привилегии могут относиться к таблицам и представлениям, определенным в текущей <схеме> (<schema>), или могут быть привилегиями, которые были переданы данному <идентификатору полномочий> (<authorization identifier>) другой <схемой> (<schema>). Раздел WITH GRANT OPTION <определения привилегии> (<privilege definition>) определяет, может ли получатель привилегии передавать ее другим.

<Модуль> (<module>) специфицирует <идентификатор полномочий> <authorization identifier>, <идентификатор полномочий модуля> (<module authorization identifier>), который должен обладать привилегиями, достаточными для выполнения каждого <оператора SQL> (<SQL statement>) в <модуле> (<module>).


Процедуры


<Процедура> (<procedure>) состоит из <имени процедуры> (<procedure name>), последовательности <объявлений параметров> (<parameter declaration>) и одного <оператора SQL> (<SQL statement>).

Прикладная программа, ассоциированная с <модулем> (<module>), может обращаться к <процедурам> (<procedure>) этого <модуля> (<module>) через оператор "call", в котором определяется <имя процедуры> (<procedure name>) этой <процедуры> (<procedure>) и задается последовательность значений параметров, число и <тип данных> (<data type>) которых соответствует <объявлениям параметров> (<parameter declaration>) этой <процедуры> (<procedure>). Вызов <процедуры> (<procedure>) приводит к выполнению содержащегося в ней <предложения SQL> (<SQL statement>).



Схемы


<Схема> (<schema>) есть долговременно хранимый объект, определенный на языке определения схем. Он состоит из <раздела полномочий схемы> (<schema authorization clause>) и всех <определений таблицы> (<table definition>), <определений представления> (<view definition>) и <определений привилегий> (<privilege definition>), известных системе для указанного <идентификатора полномочий> (<authorization identifier>) в среде. Понятие среды определяется в реализации.

Таблицы, представления и привилегии, определенные через <схему> (<schema>), рассматриваются как "принадлежащие" или должные быть "созданными" <идентификатором полномочий> (<authorization identifier>), определенным для этой схемы.

Замечание: В реализации могут обеспечиваться средства (такие, как DROP TABLE, DROP VIEW, ALTER TABLE и REVOKE), которые позволяют создавать, уничтожать и модифицировать определения таблиц, представлений и привилегий для данного <идентификатора полномочий> (<authorization identifier>) в разные моменты времени. Однако в этом стандарте рассматриваются только <схемы> (<schema>), представляющие определения, которые известны системе в данный момент времени.



Символьные строки


Символьная строка состоит из последовательности символов из определенного в реализации множества символов. Символьная строка обладает длиной, которая является положительным целым числом, определяющим число символов в последовательности.

Все символьные строки сравнимы. Символьная строка идентична другой символьной строке, если и только если она равна этой символьной строке в соответствии с правилами сравнения, определенными в , "<Предикат сравнения> (<comparison predicate>)".



Синтаксис встраивания


<Программа со встроенным SQL> (<embedded SQL host program>) (<программа на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>), <программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>), <программа на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>) или <программа на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>)) - это прикладная программа, которая содержит текст на языке программирования и текст на языке SQL. Текст на языке программирования должен удовлетворять требованиям конкретного стандарта языка программирования. Текст на языке SQL должен состоять из одного или более <встроенных операторов SQL> (<embedded SQL statement>) и (необязательно) из одной или более <встроеных секций объявлений SQL> (<embedded SQL declare section>). Это позволяет представлять приложения базы данных в гибридной форме, в которой <операторы SQL> (<SQL statement>) прямо встроены в прикладную программу. Такая гибридная прикладная программа по определению должна быть эквивалентна стандартной прикладной программе, в которой <операторы SQL> (<SQL statement>) заменены на вызовы <процедур> (<procedure>) SQL в отдельном <модуле> (<module>) SQL.



Соглашения


Синтаксические элементы этого стандарта определяются в следующих терминах:

Функция: короткое предложение о назначении элемента.

Формат: БНФ-определение синтаксиса элемента.

Синтаксические правила: дополнительные синтаксические ограничения, которым должен удовлетворять элемент, не выраженные в БНФ.

Общие правила: последовательная спецификация эффекта выполнения элемента.

В Синтаксических правилах термин "должен" определяет условия, которым должен удовлетворять любой вариант языка SQL, синтаксически соответствующий стандарту. Язык SQL синтаксически соответствует стандарту, если соответствует и Форматам и Синтаксическим правилам.

В Общих правилах термин "должен" определяет условия, которые проверяются во время выполнения операторов SQL. Если все эти условия истинны, то оператор выполняется успешно и в параметр SQLCODE устанавливается определенное неотрицательное число. Если какое-либо из условий ложно, оператор не выполняется успешно, не влияет на состояние базы данных, и в параметр SQLCODE устанавливается определенное реализатором отрицательное число.

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

Термин "долговременно хранимый объект" используется для характеризования таких объектов, как <модуль> (<module>) и <схема> (<schema>), которые создаются и уничтожаются с помощью механизмов, определенных реализатором.

В этом стандарте разделы начинаются с новых страниц с нечетными номерами, и, начиная с "Общих элементов" Раздела до "Языка манипулирования данными" Раздела , подразделы начинаются с новой страницы. Возникающие в результате пустоты несущественны.



Соответствие


В этом стандарте определяются соответствующие язык SQL и реализации SQL. Соответствующий стандарту язык SQL должен придерживаться Формата БНФ и соответствующих Синтаксических правил. Соответствующая реализация SQL должна обрабатывать соответствующий стандарту язык SQL в соответствии с Общими правилами.

В реализации, провозглашаемой соответствующей SQL-DDL, должен обрабатываться SQL-DDL (<схема> (<schema>)) на уровне 1 или уровне 2.

В реализации, провозглашаемой соответствующей SQL-DML, на уровне 1 или уровне 2 должны обрабатываться:

Прямые вызовы операторов языка манипулирования данными SQL (<операторы SQL> (<SQL statement>)) и/или

Язык модулей (<модуль> (<module>)) и/или

один или более из


a) COBOL со встроенным SQL (<программа на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>));


b) FORTRAN со встроенным SQL (<программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>));


c) Pascal со встроенным SQL (<программа на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>));


d) PL/1 со встроенным SQL (<программа на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>)).

В реализации, провозглашаемой полностью соответствующей SQL, должно обеспечиваться на уровне 1 или уровне 2 соответствие SQL-DDL и соответствие SQL-DML.

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

При провозглашении соответствия этому стандарту должно устанавливаться:

Какой из следующих типов соответствия провозглашается:


a) Полное соответствие SQL на уровне 1;


b) Полное соответствие SQL на уровне 2;


c) Cоответствие SQL-DDL на уровне 1;



d) Cоответствие SQL-DDL на уровне 2;

e) Cоответствие SQL-DML на уровне 1;

f) Cоответствие SQL-DML на уровне 2.

Какие из следующих возможностей реализованы:

a) Прямая обработка операторов языка манипулирования данными SQL;

b) Язык модулей (<модуль> (<module>));

c) COBOL со встроенным SQ (<программа на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>));

d) FORTRAN со встроенным SQL (<программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>));

e) Pascal со встроенным SQL (<программа на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>));

f) PL/1 со встроенным SQL (<программа на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>)).

Реализовано ли средство поддержания целостности.

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


Ссылки


ISO 1539, Programming Languages - FORTRAN (endorsement by ISO of American National Standard X3.9).

ISO 1989, Programming Languages - COBOL (endorsement by ISO of American National Standard X3.23).

ISO 6160, Programming Languages - PL/1 (endorsement by ISO of American National Standard X3.53).

ISO 7185, Programming Languages - Pascal (endorsement by ISO of British Standard 6192 for the English text).



Стандартные языки программирования


Стандарт определяет действия <процедур> (<procedure>) в <модулях> (<module>), когда эти <процедуры> (<procedure>) вызываются программами, соответствующими определенным стандартным языкам программирования. Термины "стандартная программа на языке COBOL", "стандартная программа на языке FORTRAN", "стандартная программа на языке Pascal" и "стандартная программа на языке PL/1" относятся к программам, отвечающим критериям соответствия стандартов, перечисленных в разделе 2, "Ссылки" .



Столбцы


Столбец есть мультимножество значений, которое может меняться во времени. Все значения одного столбца являются значениями одного типа и значениями в одной таблице. Значение столбца - минимальный элемент данных, которые могут быть выбраны из таблицы, и минимальный элемент данных, которые могут быть изменены.

Столбец имеет описание и порядковую позицию в таблице. Описание столбца включает его тип данных и указание о том, распространяется ли на столбец ограничение содержать только не неопределенные значения. Описание столбца символьных строк определяет его атрибут длины. Описание столбца приблизительных чисел определяет точность этих чисел. Описание столбца точных чисел определяет точность и масштаб этих чисел.

Именованный столбец есть столбец именованной таблицы или столбец, который наследует описание именованного столбца. Описание именованного столбца включает его имя.



Таблицы


Таблица есть мультимножество строк. Строка есть непустая последовательность значений. Все строки одной таблицы обладают одинаковой мощностью и содержат значения каждого столбца этой таблицы. I-ое значение каждой строки таблицы является значением i-ого столбца этой таблицы. Строка является минимальным элементом данных, которые можно занести в таблицу и удалить из таблицы.

Степень таблицы есть число столбцов этой таблицы. В любой момент времени степень таблицы та же, что и мощность каждой из ее строк, и мощность таблицы та же, что и мощность каждого из ее столбцов.

Таблица имеет описание. Это описание включает описание каждого из столбцов таблицы.

Базовая таблица есть именованная таблица, определенная через <определение таблицы> (<table definition>). Описание базовой таблицы включает ее имя.

Порожденная таблица - это таблица, порожденная прямо или косвенно из одной или нескольких других таблиц путем вычисления <спецификации запроса> (<query specification>). Значениями порожденной таблицы являются значения определяющих таблиц при ее порождении.

Представляемая таблица есть именованная таблица, определенная через <определение представления> (<view definition>). Описание представляемой таблицы включает ее имя.

Таблица является либо изменяемой (updatable), либо только читаемой. Операции занесения, модификации и удаления допускаются для изменяемых таблиц и не допускаются для только читаемых таблиц.

Сгруппированная таблица есть множество групп, порождаемых в ходе вычисления <раздела group by> (<group by clause>). Группа - это мульти-множество строк, в которых все значения столбца (столбцов) группирования равны. Сгруппированную таблицу можно рассматривать как набор таблиц. Множественные функции могут применяться к индивидуальным кортежам внутри сгруппированной таблицы.

Сгруппированное представление - это представляемая таблица, порожденная из сгруппированной таблицы.



Типы данных


Тип данных есть множество представимых значений. Логическое представление значения есть <литерал> (<literal>). Физическое представление значения зависит от реализации.

Значение является примитивным в том смысле, что в этом стандарте не производится логическое подразделение значений. Значение может быть неопределенным значением или не неопределенным значением.

Неопределенное значение есть определяемое в реализации зависящее от типа специальное значение, отличное ото всех не неопределенных значений этого типа.

Не неопределенное значение есть либо символьная строка, либо число. Символьная строка и число - это несравнимые значения.



Транзакции


Транзакция есть последовательность операций, включающая операции над базой данных, атомарная по отношению к восстановлению и асинхронности. Транзакция начинается, когда вызывается процедура и никакая транзакция в данный момент не активна. Транзакция заканчивается при выполнении <оператора фиксации> (<commit statement>) или <оператора отката> (<rollback statement>). Если транзакция завершается выполнением <оператора фиксации> (<commit statement>), все изменения, внесенные в базу данных этой транзакцией делаются доступными для всех асинхронно выполняемых транзакций. Если транзакция завершается выполнением <оператора отката> (<rollback statement>), все изменения, внесенные в базу данных этой транзакцией, аннулируются. Зафиксированные изменения не могут быть аннулированы. Изменения, внесенные в базу данных транзакцией, могут восприниматься этой транзакцией, но до тех пор, пока транзакция не завершится выполнением <оператора фиксации> (<commit statement>), они не могут восприниматься другими транзакциями.

Гарантируется сериализуемость выполнения асинхронных транзакций. Сериализуемое выполнение определяется как выполнение операций асинхронно выполняемых транзакций, которое производит то же самое действие, что и некоторое последовательное выполнение тех же самых транзакций. Последовательное выполнение - это такое выполнение, при котором каждая транзакция полностью завершается перед началом выполнения следующей транзакции.

Выполнение <оператора SQL> (<SQL statement>) внутри транзакции не оказывает никаких воздействий на базу данных кроме тех, которые установлены Общими правилами для этого <оператора SQL> (<SQL statement>).

Из этого совместно с гарантированным сериализуемым выполнением транзакций следует воспроизводимость всех операций чтения внутри транзакции, если не учитывать следующего:

Влияния изменений базы данных и ее содержимого, явно производимых самой транзакцией.

Влияния изменений значений параметров, поставляемых процедурам, которые открывают курсоры, на последующие выборки через эти курсоры.

|



Формат


<character> ::=

<digit> | <letter> | <special character>

<digit> ::=

0|1|2|3|4|5|6|7|8|9

<letter> ::=

<upper case letter> | <lower case letter>

<upper case letter> ::=

A|B|C|D|E|F|G|H|I

|J|K|L|M|N|O|P|Q|R

|S|T|U|V|W|X|Y|Z

<lower case letter> ::=

a|d|c|d|e|f|g|h|i

|j|k|l|m|n|o|p|q|r

|s|t|u|v|w|x|y|z

<special character> ::=

См. Синтаксическое правило 1.


<literal> ::=

<character string literal>

| <numeric literal>

<character string literal> ::=

'<character representation>...'

<character representation> ::=

<nonquote character>

| <quote representation>

<nonquote character ::=

См. Синтаксическое правило 1.

<quote representation> ::=

''

<numeric literal> ::=

<exact numeric literal>

| <approximate numeric literal>

<exact numeric literal> ::=

[+|-] { <unsigned integer>[.<unsigned integer>]

| <unsigned integer>.

| .<unsigned integer> }

<approximate numeric literal> ::=

<mantissa>E<exponent>

<mantissa> ::= <exact numeric literal>

<exponent> ::= <signed integer>

<signed integer> ::= [+|-] <unsigned integer>

<unsigned integer> ::=

<digit>...




<token> ::=

<nondelimiter token> | <delimiter token>

<nondelimiter token> ::=

<identifier>

| <key word>

| <numeric literal>

<identifier> ::=

<upper case letter>[{ [<underscore>]<letter or digit>}...]

<underscore> ::= _

<letter or digit> ::=

<upper case letter> | <digit>

<key word> ::=

ALL | AND | ANY | AS | ASC | AUTHORIZATION | AVG

| BEGIN | BETWEEN | BY

| CHAR | CHARACTER | CHECK | CLOSE | COBOL | COMMIT

| CONTINUE | COUNT | CREATE | CURRENT | CURSOR

| DEC | DECIMAL | DECLARE | DEFAULT | DELETE | DESC

| DISTINCT | DOUBLE

| END | ESCAPE | EXEC | EXISTS

| FETCH | FLOAT | FOR | FOREIGN | FORTRAN | FOUND

| FROM

| GO | GOTO | GRANT | GROUP | HAVING

| IN | INDICATOR | INSERT | INT | INTEGER | INTO | IS

| KEY | LANGUAGE | LIKE

| MAX | MIN | MODULE | NOT | NULL | NUMERIC

| OF | ON | OPEN | OPTION | OR | ORDER

| PASCAL | PL1 | PRECISION | PRIMARY | PRIVILEGES |

| PROCEDURE | PUBLIC

| REAL | REFERENCES | ROLLBACK

| SCHEMA | SECTION | SELECT | SET | SMALLINT | SOME

| SQL | SQLCODE | SQLERROR | SUM

| TABLE | TO | UNION | UNIQUE | UPDATE | USER

| VALUES | VIEW | WHENEVER | WHERE | WITH | WORK

<delimiter token> ::=

<character string literal>

|,|(|)|<|>|.|:|=|*|+|-|/|<>|>=|<=

<separator> ::=

{ <comment> | <space> | <newline> }...

<comment> ::=

<comment introduser> [<character>...] <newline>

<comment introduser> ::= См. Синтаксическое правило 5.

<newline> ::=

определенный в реализации индикатор конца строки

<space> ::=

символ пробела




<table name> ::= [<authorization identifier>.]

<table identifier>

<authorization identifier> ::= <identifier>

<table identifier> ::= <identifier>

<column name> ::= <identifier>

<correlation name> ::= <identifier>

<module name> ::= <identifier>

<cursor name> ::= <identifier>

<procedure name> ::= <identifier>

<parameter name> ::= <identifier>




<data type> ::=

<character string type>

| <exact numeric type>

| <approximate numeric type>

<character string type> ::=

CHARACTER [(<lenght>)]

| CHAR [(<lenght>)]

<exact numeric type> ::=

NUMERIC [(<precision> [,<scale>])]

| DECIMAL [(<precision> [,<scale>])]

| DEC [(<precision> [,<scale>])]

| INTEGER

| INT

| SMALLINT

<approximate numeric type> ::=

FLOAT [(<precision>)]

| REAL

| DOUBLE PRECISION

<lenght> ::= <unsigned integer>

<precision> ::= <unsigned integer>

<scale> ::= <unsigned integer>




<value specification> ::=

<parameter specification>

| <variable specification>

| <literal>

| USER

<target specification> ::=

<parameter specification>

| <variable specification>

<parameter specification> ::=

<parameter name> [<indicator paremeter>]

<indicator parameter> ::=

[INDICATOR] <parameter name>

<variable specification> ::=

<embedded variable name> [<indicator variable>]

<indicator variable> ::=

[INDICATOR] <embedded variable name>



Функция


Определяет терминальные символы языка и элементы строк.


Специфицируют одно или более значений, параметров или пе-

ременных.



Общие правила


Значение <литерала символьной строки> (<character string literal>) - это последовательность содержащихся в нем <символов> (<character>).

Численное значение <литерала точного числа> (<exact numeric literal>) получается путем обычной математической интерпретации знаковой позиционной десятичной записи.

Численное значение <литерала приблизительного числа> (<approximate numeric literal>) есть результат умножения точного численного значения, представленного <мантиссой> (<mantissa>), на число, полученное путем возведения числа 10 в степень, представляемую <порядком> (<exponent>).


Если <спецификация параметра> (<parameter specification>) содержит <параметр-индикатор> (<indicator parameter>) и значение параметра-индикатора отрицательно, то значение, специфицируемое <спецификацией параметра> (<parameter specification>) - не определенное. В противном случае значение, специфицируемое <спецификацией параметра>(<parameter specification>) - это значение параметра, идентифицируемого <именем параметра> (<parameter name>).

Если <спецификация переменной>(<variable specification>) содержит <переменную-индикатор> (<indicator variable>) и значение переменной-индикатора отрицательно, то значение, специфицируемое <спецификацией переменной> (<variable specification>) - не определенное. В противном случае значение, специфицируемое <спецификацией переменной> (<variable specification>) - это значение переменной, идентифицируемой <именем встроенной переменной> (<embedded variable name>).

Значение, специфицируемое <литералом> (<literal>) - это значение, представляемое этим <литералом> (<literal>).

Значение, специфицируемое USER, равно <идентификатору полномочий> (<authorization identifier>), указанному как <идентификатор полномочий модуля> (<module authorization identifier>) <модуля> (<module>), содержащего <оператор SQL> (<SQL statement>), выполнение которого вызвало вычисления <спецификации значения> (<value specification>) USER.

| |



Синтаксические правила


<Специальный символ> (<special character>) является любым символом из определенного в реализации множества символов, отличным от <цифры> (<digit>) и <буквы> (<letter>). Если в реализации индикатор конца строки является символом, он также должен быть исключен из <специальных символов> (<special character>).


Замечание: См. Формат для <перевода строки> (<newline>) в , "<Лексемы> (<token>)".

Множество <специальных символов> (<special character>) должно включать все символы, отличные от <цифры> (<digit>) и <буквы> (<letter>), встречающиеся в терминальных продукциях языка SQL, и символы знака процента и подчеркивания.


<Символ-не-кавычки> (<nonquote character>) - это любой <символ> (<character>), отличный от символа одиночной кавычки (').

Тип данных <литерала символьной строки> (<character string literal>) представляет строку символов. Длина <литерала символьной строки> (<character string literal>) есть число <представлений символов> (<character representation>), которые он содержит. Каж дое <представление кавычки> (<quote representation>) в <литерале символьной строки> (<character string literal>) представляет символ одиночной кавычки как в значении, так и в длине <литерала символьной строки> (<character string literal>).

Для <литерала точного числа> (<exact numeric literal>) без десятичной точки (.) неявно предполагается наличие десятичной точки после последней <цифры> (<digit>).

Тип данных <литерала точного числа> (<exact numeric literal>) представляет точные числа. Точность <литерала точного числа> (<exact numeric literal>) есть число <цифр> (<digit>), которые он содержит. Масштаб <литерала точного числа> (<exact numeric literal>) есть число <цифр> (<digit>) справа от десятичной точки.

Тип данных <литерала приблизительного числа> (<approximate numeric literal>) представляет приблизительные числа. Точность <литерала приблизительного числа> (<approximate numeric literal>) есть точность его <мантиссы> (<mantissa>).




<Лексическая единица> (<token>), отличная от <литерала символьной строки> (<character string literal>), не должна включать <пробел> (<space>).

За любой <лексической единицей> (<tocken>) может следовать <разделитель> (<separator>). За <лексемой-не-ограничителем> (<nondelimiter tocken>) должны следовать <лескема-ограничитель> (<delimiter tocken>) или <разде литель> (<separator>). Если синтаксис не допускает на личия <лексемы-ограничителя> (<delimiter tocken>) за <лексемой-не-ограничителем> (<nondelimiter tocken>), то за <лексемой-не-ограничителем> (<nondelimiter tocken>) должен следовать <разделитель> (<separator>).

<Идентификатор> (<identifier>) не должен содержать более 18 <символов> (<character>).

<Идентификатор> (<identifier>) не должен совпадать с <ключевым словом> (<key word>).

<Предваритель комментария> (<comment introduser>) есть последовательность двух или более дефисов (-), не раз деленных ни одним <пробелом> (<space>) или <переводом строки> (<newline>) и не входящих в <литерал символьной строки> (<character string literal>).




<Имя таблицы> (<table name>) идентифицирует именованную таблицу.

Если <имя таблицы> (<table name>) не включает <идентификатора полномочий> (<authorization identifier>), то:


a) Если <имя таблицы> (<table name>) содержится в <схеме> (<schema>), то по умолчанию предполагается <идентификатор полномочий> (<authorization identifier>), определяемый как <идентификатор полномочий схемы> (<schema authorization identifier>) данной <схемы> (<schema>).


b) Если <имя таблицы> (<table name>) содержится в <модуле> (<module>), то по умолчанию предполагается <идентификатор полномочий> (<authorization identifier>), определяемый как <идентификатор полномочий модуля> (<module authorization identifier>) данного <модуля> (<module>).

Два <имени таблицы> (<table name>) совпадают, в том и только в том случае, если они включают один и тот же <идентификатор таблицы> (<table identifier>) и один и тот же <идентификатор полномочий> (<authorization identifier>), независимо от того, явно или неявно указаны <идентификаторы полномочий> (<authorization identifier>).

<Имя таблицы> (<table name>) объявляется в <определении таблицы> (<table definition>) или в <определении представления> (<view definition>).

<Имя таблицы> (<table name>) в <операторе SQL> (<SQL statement>) должно идентифицировать таблицу, определенную в <схеме> (<schema>).

<Идентификатор полномочий> (<authorization identifier>) представляет идентификатор полномочий.

<Идентификатор> (<identifier>) объявляется как <имя кореляции> (<correlation name>) и ассоциируется с таблицей для индивидуальной области действия. Область действия <имени кореляции> (<correlation name>) - это либо <оператор выборки> (<select statement>), либо <подзапрос> (<subquery>), либо <спецификация запроса> (<query specification>) (см. , "<Раздел from> (<from clause>)"). Области действия могут быть вложенными. В разных областях действия одно и то же <имя кореляции> (<correlation name>) может быть ассоциировано с разными таблицами или с одной и той же таблицей.

<Имя столбца> (<column name>) идентифицирует именованный столбец. <Идентификатор> (<identifier>) определяется как <имя столбца> (<column name>) через <определение таблицы> (<table definition>) или через <определение представления> (<view definition>).

<Имя модуля> (<module name>) идентифицирует <модуль> (<module>).

<Имя курсора> (<cursor name>) идентифицирует <курсор> (<cursor>).

<Имя процедуры> (<procedure name>) идентифицирует <процедуру> (<procedure>).

<Имя параметра> (<parameter name>) идентифицирует параметр.




CHAR - это синоним для CHARACTER. DEC - это синоним для DECIMAL. INT - это синоним для INTEGER.

Значение <целого без знака> (<unsigned integer>), т.е. <длина> (<lenght>> или <точность> (<precision>), должно быть больше 0.

Если <длина> (<lenght>) опущена, то она предполагается равной 1. Если <масштаб> (<scale>) опущен, то предполагается равным 0. Если опущена <точность> (<precision>), то значение определяется в реализации.

<Масштаб> (<scale>) для <типа точных чисел> (<exact numeric type>) не должен быть больше, чем <точность> (<precision>) для <типа точных чисел> (<exact numeric type>).

CHARACTER специфицирует тип данных строк символов с длиной, специфицируемой <длиной> (<lenght>).

NUMERIC специфицирует тип данных точных чисел с точностью и масштабом, специфицируемыми через <точность> (<precision>) и <масштаб> (<scale>).

DECIMAL специфицирует тип данных точных чисел с масштабом, специфицируемым <масштабом> (<scale>) и определяемой в реализации точностью, равной или большей зна чения указанной <точности> (<precision>).

INTEGER специфицирует тип данных точных чисел с определенной в реализации точностью и масштабом 0.

SMALLINT специфицирует тип данных точных чисел с масштабом 0 и определенной в реализации точностью не большей, чем определенная в реализации точность INTEGER.

FLOAT специфицирует тип данных приблизительных чисел с двоичной точностью, равной или большей значения указанной <точности> (<precision>).

REAL специфицирует тип данных приблизительных чисел с определенной в реализации точностью.

DOUBLE PRECISION специфицирует тип данных приблизительных чисел с определенной в реализации точностью большей, чем определенная в реализации точность для REAL.




<Спецификация значения> (<value specification>) специфицирует значение, которое не выбирается из таблицы.

<Спецификация параметра> (<parameter specification>) идентифицирует параметр или параметр и параметр-индикатор. Тип данных параметра-индикатора должен быть типом точных чисел со шкалой 0. Конкретный <тип точных чисел> (<exact numeric type>) параметров-индикаторов определяется в реализации.

<Спецификация переменной> (<variable specification>) идентифицирует переменную включающего языка или переменную включающего языка и переменную-индикатор. Тип данных переменной-индикатора должен быть определенным в реализации типом данных для параметров-индикаторов.

<Спецификация цели> (<target specification>) специфицирует параметр или переменную, которым может быть присвоено значение.

<Спецификация параметра> (<parameter specification>) должна содержаться в <модуле> (<module>). <Спецификация переменной> (<variable specification>) должна со держаться во <встроенном операторе SQL> (<embedded SQL statement>).

Тип данных USER - это символьная строка длины, определенной в реализации.



<Предикат> (<predicate>)


Функция

Специфицирует условие, для которого может быть вычислено истиностное значение "true", "false" или "unknown".

Формат

<predicate> ::=

<comparison predicate>

| <between predicate>

| <in predicate>

| <like predicate>

| <null predicate>

| <quantified predicate>

| <exists predicate>

Синтаксические правила

Нет.

Общие правила

Результат <предиката> (<predicate>) получается его применением к данной строке таблицы.



<Предикат сравнения> (<comparison predicate>)


Функция

Специфицирует сравнение двух значений.

Формат

<comparison predicate> ::=

<value expression> <comp op>

{<value expression> | <subquery>}

<comp op> ::=

= | <> | < | > | <= | >=

Синтаксические правила

Тип данных первого <выражения, вырабатывающего результат> (<value expression>) и <подзапроса> (<subquery>) или второго <выражения, вырабатывающего значение> (<value expression>) должны быть сравнимыми.

Общие правила

Пусть x обозначает результат первого <выражения, вырабатывающего значение> (<value expression>) и пусть y обозначает результат <подзапроса> (<subquery>) или второго <выражения, вырабатывающего значение> (<value expression>). Мощность результата <подзапроса> (<subquery>) не должна быть больше единицы.

Если x или y являются неопределенными значениями или если результат <подзапроса> (<subquery>) пустой, то результатом "x <comp op> y" является unknown.

Если x и y являются не неопределенными значениями, то результатом "x <comp op> y" является true или false: "x = y" есть true тогда и только тогда, когда x и y равны. "x <> y" есть true тогда и только тогда, когда x и y не равны. "x < y" есть true тогда и только тогда, когда x меньше, чем y. "x > y" есть true тогда и только тогда, когда x больше, чем y. "x <= y" есть true тогда и только тогда, когда x не больше, чем y. "x >= y" есть true тогда и только тогда, когда x не меньше, чем y.

Числа сравниваются в соответствии с их алгебраическими значениями.

Сравнение двух символьных строк определяется через сравнение <символов> (<character>) с одинаковыми порядковыми позициями. Если строки не имеют одинаковую длину, то сравнение производится с рабочей копией более короткой строки, дополненной справа пробелами <space> таким образом, чтобы она имела длину, равную длине другой строки.

Две строки равны, если все <символы> (<character>) с одинаковыми порядковыми позициями совпадают. Если две строки не равны, то их отношение определяется на основе сравнения первой пары неравных <символов> (<character>) с левого конца строк. Это сравнение производится в соответствии с определенной в реализации последовательностью сопоставления.

Хотя "x = y" есть unknown, если x и y являются неопределенными значениями, в контекстах GROUP BY, ORDER BY и DISTINCT неопределенное значение идентично или является дубликатом другого неопределенного значения.

| |



<Спецификация функции над множеством> (<set function specification>)


Функция

Специфицирует значение, получаемое применением функции к аргументу.

Формат

<set function specification> ::=

COUNT(*) | <distinct set function>

| <all set function>

<distinct set function> ::=

{ AVG | MAX | MIN | SUM | COUNT }

(DISTNICT <column specification>)

<all set function> ::=

{ AVG | MAX | MIN | SUM }

([ALL] <value expression>)

Синтаксические правила

Аргумент COUNT(*) и источник аргумента <функции над различными элементами множества> (<distinct set function>) и <функции надо всеми элементами множества> (<all set function>) - это таблица или группа сгруппированной таблицы в соответствии со спецификациями в , "<Выражение, вырабатывающее таблицу> (<table expression>)", , "<Подзапрос> (<subquery>)" и , "<Спецификация запроса> (<query specification>)".

Пусть R обозначает аргумент или источник аргумента <спецификации функции над множеством> (<set function specification>).

<Спецификация столбца> (<column specification>) <функции над различными элементами множества> (<distinct function specification>) и каждая <спецификация столбца> (<column specification>) в <выражении, вырабатывающем значение> (<value expression>) <функции надо всеми элементами множества> (<all set function>) должны недвусмысленно ссылаться на столбец R и не должны ссылаться на столбец, порожденный из <спецификации функции над множеством> (<set function specification>).

<Выражение, вырабатывающее значение> (<value expression>) <функции надо всеми элементами множества> должно включать <спецификацию столбца> (<column specification>), которая ссылается на столбец R, и не должно включать <спецификацию функции над множеством> (<set function specification>). Если <спецификация столбца> (<column specification>) является внешней ссылкой, то <выражение, вырабатывающее значение> (<value expression>) не должно включать никаких операторов.
Замечание: "Внешняя ссылка" определяется в , "<Спецификация столбца> (<column specifiction">).


Если <спецификация функции над множеством> (<set function specification>) содержит <спецификацию столбца> (<column specificaton>), являющуюся внешней ссылкой, то <спецификации функции над множеством> (<set function specification>) должна содержаться в <подзапросе> (<subquery>) <статьи having> (<having clause>).

Замечание: "Внешняя ссылка" определяется в 5.7, "<Спецификация столбца> (<column specifiction">).

Пусть T тип данных значений, являющихся результатами вычисления <спецификации столбца> (<column specification>) или <выражения, вырабатывающего значение> (<value expression>).

Если указывается COUNT, то тип данных результата <спецификации функции над множеством> (<set function specification>) - это тип точных чисел с определенной в реализации точностью и масштабом 0.

Если указывается MAX или MIN, то тип данных результата есть T.

Если указывается SUM или AVG, то:

a) тип T не должен быть типом символьных строк.

b) если указывается SUM и T - тип точных чисел с масштабом S, то тип данных результата - тип точных чисел с определенной в реализации точностью и масштабом S.

c) если указывается AVG и T - тип точных чисел с масштабом S, то тип данных результата - тип точных чисел с определенными в реализации точностью и масштабом.

d) если T - тип приблизительных чисел, то тип результата - тип приблизительных чисел с определенной в реализации точностью.

Общие правила

Аргументом <функции над различными элементами множества> (<distinct set function>) является множество значений. Это множество получается путем удаления неопределенных значений и всех избыточных дублирующих значений из столбца R, на который ссылается <спецификация столбца> (<column specification>).

Аргументом <функции надо всеми элементами множества> (<all set function>) является мультимножество значений. Это мультимножество получается путем удаления всех неопределенных значений из результата применения <выражения, вырабатывающего значение> (<value expression>) к каждой строке R. Указание или неуказание ALL не влияет на смысл <функции надо всеми элементами множества> (<all set function>).



Пусть S обозначает аргумент <функции над различными элементами множества> (<distinct set function>) или <функции надо всеми элементами множества> (<all set function>).

Тогда:

a) Если задается <функция над различными элементами множества> (<distinct set function>) COUNT, то результатом является мощность S.

b) Если задается функция COUNT(*), то результатом является мощность R.

c) Если задается функция AVG, MAX, MIN или SUM и S пусто, то результатом является неопределенное значение.

d) Если задается MAX или MIN, то результатом является, соответственно, максимальное или минимальное значение в S. Эти результаты определяются с использованием правил сравнения, определенных в , "<comparison predicate>".

e) Если задается SUM, то результатом является суммазначений в S. Сумма должна быть в пределах диапазона значений типа данных результата.

f) Если задается AVG, то результатом является среднеезначение значений в S. Сумма значений в S должнабыть в пределах диапазона значений типа данных результата.


<Спецификация столбца> (<column specification>)


Функция

Указание именованного столбца.

Формат

<column specification> ::=

[<qualifier>.] <column name>

<qualifier> ::=

<table name> | <correlation name>

Синтаксические правила

<Спецификация столбца> указывает именованный столбец. Смысл указания столбца зависит от контекста.

Пусть C <имя столбца> (<column name>) в <спецификации столбца> (<column specification>).

Тогда:


a) Если <спецификация столбца> (<columnspecification>) содержит <квалификатор>(<qualifier>), то <спецификация столбца> должна содержаться в области действия одного или более <иментаблиц> (<table name>) или <имен кореляции>(<correlation name>), равных <квалификатору>(<qualifier>). Если таких <имен таблиц> (<tablename>) или <имен кореляции> (<correlation name>)больше одного, то используется имя с наиболее локальной областью действия. Таблица, ассоциированнаяс указанным <именем таблицы> (<table name>) или<именем кореляции> (<correlation name>), должнавключать столбец с <именем столбца> (<column name>) C.


b) Если <спецификация столбца> (<columnspecification>) не включает <квалификатор>(<qualifier>), то она должна содержаться в областидействия одного или более <имен таблиц> (<tablename>) или <имен кореляции> (<correlation name>).Пусть фраза "возможные квалификаторы" обозначает те<имена таблиц> (<table name>) и <имена корреляций>(<correlation name>), для которых ассоциированныетаблицы включают столбец, <имя столбца> (<columnname>) которого есть C. Должен существовать в точности один возможный квалификатор с наиболее локальной областью действия, и это <имя таблицы>(<table name>) или <имя корреляции> (<correlationname>) неявно используется.


Замечание: "Область действия" <имени таблицы> (table name> или <имени кореляции> (<correlation name>) специфицируется в "<Раздел from> (<from clause>)", , "<Определение таблицы> (<table definition>)" , , "<Оператор удаления: поисковый> (<delete statement: searched>)" , , "<Оператор модификации: позиционный> (<update statement: positioned>)" и , "<Оператор модификации: поисковый>(<updatestatement: searched>)".


Если <спецификация столбца> (<column specification>) содержится в <выражении над таблицами> (<table expression>) T и область действия явно или неявно указанного <квалификатора> (<qualifier>) <спецификации столбца> (<column specification>) есть некоторый <оператор SQL> (<SQL statement>) или <выражение над таблицами> (<table expression>), содержащее <выражение над таблицами> (<table expression>) T, то <спецификация столбца> (<column specification>) является "внешней ссылкой" на таблицу, ассоциированную с этим <квалификатором> (<qualifier>).

Пусть T обозначает таблицу, ассоциированную с явно или неявно специфицированным <квалификатором> (<qualifier>) R. Тип данных <спецификации столбца> (<column specification>) есть тип данных столбца C таблицы T.

Общие правила

"C" или "R.C" ссылаются на столбец C данной строки T.


<Выражение, вырабатывающее значение> (<value expression>)


Функция

Специфицирует значение.

Формат

<value expression> ::=

<term>

| <value expression> + <term>

| <value expression> - <term>

<term> ::=

<factor>

| <term> * <factor>

| <term> / <factor>

<factor> ::=

[+|-] <primary>

<primary> ::=

<value specification>

| <column specification>

| <set function specification>

| ( <value expression> )

Синтаксические правила

<Выражение, вырабатывающее значение> (<value expression>), включающее <функцию над различными элементами множества>, не должно включать никаких двухместных операторов.

Первый <символ> (<character>) <лексемы> (<token>), следующей за одноместным оператором, не должен быть знаком плюс или минус.

Если тип данных <первичного выражения> (<primary>) является типом символьных строк, то <выражение, вырабатывающее значение> (<value expression>) не должно включать никаких операторов. Типом данных результата является тип символьных строк.

Если тип данных обоих операндов оператора является типом точных чисел, то тип данных результата является типом точных чисел с точностью и масштабом, определяемыми следующим образом:


a) Пусть s1 и s2 - масштабы первого и второго операндов, соответственно.


b) Точность результата сложения и вычитания определяется в реализации, и масштаб есть max(s1,s2).


c) Точность результата умножения определяется в реализации, и масштаб есть s1+s2.


d) Точность и масштаб результата деления определяются в реализации.

Если тип данных какого-либо операнда оператора является типом приблизительных чисел, то тип данных результата есть тип приблизительных чисел. Точность результата определяется в реализации.

Общие правила

Если значение <первичного выражения> (<primary>) является неопределенным значением, то результатом <выражения, вырабатывающего значение> (<value expression>) является неопределенное значение.


Если операторы не указаны, то результатом <выражения, вырабатывающего значение> (<value expression>) является значение указанного <первичного выражения> (<primary>).

Когда <выражение, вырабатывающее значение> (<value expression>) применяется к строке таблицы, каждая ссылка на столбец этой таблицы является ссылкой на значение этого столбца в этой строке.

Одноместные арифметические операторы + и - специфицируют одноместный плюс и одноместный минус, соответственно. Одноместный плюс не изменяет своего операнда. Одноместный минус изменяет знак своего операнда.

Двухместные арифметические операторы +, -, * и / специфицируют сложение, вычитание, умножение и деление соответственно. Делитель не должен быть равен 0.

Если типом результата арифметического оператора является тип целых чисел, то:

a) Если оператор не оператор деления, то математический результат операции должен быть точно представим с точностью и масштабом типа результата.

b) Если оператор - это оператор деления, то приближенный математический результат операции, представленный с точностью и масштабом типа результата не должен терять никаких лидирующих значащих цифр.

Первыми вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, одноместные операторы применяются перед операторами умножения и деления, операторы умножения и деления применяются перед операторами сложения и вычитания, и операторы одного уровня предшествования применяются слева направо.


<Предикат between> (<between predicate>)


Функция

Специфицирует сравнение с интервалом.

Формат

<between predicate> ::=

<value expression>

[NOT] BETWEEN <value expression> AND <value expression>

Синтаксические правила

Типы данных всех трех <выражений, вырабатывающих значение> (<value expression>) должны быть сравнимыми.

Общие правила

Пусть x, y и z обозначают результаты первого, второго и третьего <выражений, вырабатывающих значение> (<value expression>), соответственно.

Результат "x BETWEEN y AND z" тот же самый, что и результат "x >= y AND x <= z".

Результат "x NOT BETWEEN y AND z" тот же самый, что и результат "NOT (x BETWEEN y AND z)".



<Предикат exists> (<exists predicate>)


Функция

Специфицирует проверку множества на пустоту.

Формат

<exists predicate> ::=

EXISTS <subquery>

Синтаксические правила

Нет.

Общие правила

Пусть S обозначает результат <подзапроса> (<subquery>).

Результатом "EXISTS S" является либо true, либо false.

Результатом "EXISTS S" является true, если и только если S не пусто.



<Предикат in> (<in predicate>)


Функция

Специфицирует сравнение с квантором.

Формат

<in predicate> ::=

<value expression> [NOT] IN

{ <subquery> | (<in value list>) }

<in value list> ::=

<value specification>

{ ,<value specification> }...

Синтаксические правила

Типы данных первого <выражения, вырабатывающего значение> (<value expression>) и <подзапроса> (<subquery>) или всех <выражений, вырабатывающих значение> (<value expression>) в <списке значений in> (<in value list>) должны быть сравнимыми.

Общие правила

Пусть x обозначает результат <выражения, вырабатывающего значение> (<value expression>). Пусть S обозначает результат <подзапроса> (<subquery>) как в <предикате с квантором> (<quantified predicate>) или значения, определенные через <список значений in> (<in value list>), рассматриваемые как значения строк единственного столбца таблицы степени один.

Результат "x IN S" тот же самый, что и результат "x = ANY S". Результат "x NOT IN S" тот же самый, что и результат "NOT (x IN S)".



<Предикат like> (<like predicate>)


Функция

Специфицирует сравнение по совпадению с образцом.

Формат

<like predicate> ::=

<column specification> [NOT] LIKE <pattern>

[ESCAPE <escape character>]

<pattern> ::=

<value specification>

<escape character> ::=

<value specification>

Синтаксические правила

<Спецификация столбца> (<column specification>) должна указывать на столбец символьных строк.

Тип данных <образца> (<pattern>) должен быть типом символьных строк.

Тип данных <символа escape> (<escape character>) должен быть типом символьных строк длины 1.

Общие правила

Пусть x обозначает значение, указываемое <спецификацией столбца> (<column specification>), и пусть y обозначает результат <спецификации значения> (<value specification>) <образца> (<pattern>).

Тогда:


a) Если указывается <символ escape> (<escapecharacter>), то:


i) Пусть z обозначает результат <спецификации значения> (<value specification>) <символа escape> (<escape character>).


ii) Должно существовать разбиение строки y на подстроки такое, что каждая подстрока имеет длину 1 или 2, никакая подстрока длины 1 не содержит символа escape z, и каждая подстрока длины 2 начинается с символа escape z, за которым следует либо символ escape z, либо символ подчеркивания, либо символ знака процента. В этом разбиении y каждая подстрока длины 2 представляет одно вхождение второго символа этой подстроки. Каждая подстрока длины 1, содержащая символ подчеркивания, представляет спецификатор произвольного символа. Каждая подстрока длины 1, содержащая знак процента, представляет спецификатор произвольной строки. Каждая подстрока длины 1, не содержащая ни символа подчеркивания, ни символа знака процента, представляет символ, который она содержит.


b) Если <символ escape> (<escape character>) не указан, то каждый символ подчеркивания в y представляет спецификатор произвольного символа, каждый символ знака процента в y представляет спецификатор произвольной строки, и каждый символ в y, который не является ни символом подчеркивания, ни символом знака процента, представляет сам этот символ.


Строка y является последовательностью минимального числа спецификаторов подстрок таких, что каждый <символ> (<character>) y является частью в точности одного спецификатора подстроки. Спецификатор подстроки - это спецификатор произвольного символа, спецификатор произвольной подстроки или любая последовательность <символов> (<character>), не являющаяся спецификатором произвольного символа или спецификатором произвольной строки.

Результатом "x LIKE y" является unknown, если x или y представляют неопределенное значение. Если x и y представляют не неопределенные значения, то значением "x LIKE y" является либо true, либо false.

Результатом "x LIKE y" является true, если существует разбиение x на подстроки такое, что:

a) Подстрока x является последовательностью нуля или более подряд идущих <символов> (<character>) x, и каждый <символ> (<character>) x есть часть в точности одной подстроки.

b) Если i-ый спецификатор подстроки y является спецификатором произвольного символа, i-ая подстрока x состоит из одного произвольного <символа> (<character>).

c) Если i-ый спецификатор подстроки y является спецификатором произвольной строки, i-ая подстрока x является произвольной последовательностью нуля или более <символов> (<character>).

d) Если i-ый спецификатор подстроки y не является ни спецификатором произвольного символа, ни спецификатором произвольной строки, i-ая подстрока x совпадает с этим спецификатором подстроки и имеет ту же длину, что этот спецификатор подстроки.

e) Число подстрок x равно числу спецификаторов подстрок y.

Результат "x NOT LIKE y" такой же, как результат "NOT (x LIKE y)".


<Предикат null> (<null predicate>)


Функция

Специфицирует проверку значения на неопределенность.

Формат

<null predicate> ::=

<column specification> IS [NOT] NULL

Синтаксические правила

Нет.

Общие правила

Пусть x обозначает значение, указываемое <спецификацией столбца> (<column specification>).

Результатом "x IS NULL" является true или false.

Результатом "x IS NULL" является true, если и только если x представляет неопределенное значение.

Результат "x IS NOT NULL" такой же, как результат "NOT (x IS NULL)".



<Предикат с квантором> (<quantified predicate>)


Функция

Специфицирует сравнение с квантором.

Формат

<quantified predicate> ::=

<value expression>

<comp op> <quantifier> <subquery>

<quantifier> ::=

<all> | <some>

<all> ::= ALL

<some> ::= SOME | ANY

Синтаксические правила

Типы данных <выражения, вырабатывающего значение> (<value expression>) и <подзапроса> (<subquery>) должны быть сравнимы.

Общие правила

Пусть x обозначает результат <выражения, вырабатывающего значение> (<value expression>) и пусть S обозначает результат <подзапроса> (<subquery>).

Результат "x <comp op> <quantifier> S" вырабатывается путем применения подразумеваемого <предиката сравнения> (<comparison predicate>) "x <comp op> s" к каждому значению S:


a) Если S пусто или если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно true для каждого значения s в S, то значение "x <comp op> <all> S" есть true.


b) Если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно false хотя бы для одного значения s в S, то значение "x <comp op> <all> S" есть false.


c) Если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно true хотя бы для одного значения s в S, то значение "x <comp op> <some> S" есть true.


d) Если S пусто или если значение подразумеваемого <предиката сравнения> (<comparison predicate>) равно false для каждого значения s в S, то значение "x <comp op> <some> S" есть false.


e) Если результатом "x <comp op> <quantifier> S" не является ни true, ни false, то результатом является unknown.



<Раздел from> (<from clause>)


Функция

Специфицирует таблицу, порожденную из одной или более именованных таблиц.

Формат

<from clause> ::=

FROM <table reference> [{,<table reference>}...]

<table reference> ::=

<table name> [<correlation name>]

Синтаксические правила

<Имя таблицы> (<table name>), специфицируемое в <ссылке на таблицу> (<table reference>), экспонируется в <разделе from> (<from clause>) тогда и только тогда, когда эта <ссылка на таблицу> не специфицирует <имя кореляции> (<correlation name>).

<Имя таблицы> (<table name>), которое экспонируется в <разделе from> (<from clause>), не должно совпадать ни с каким другим <именем таблицы> (<table name>), становящимся видимым за пределами этого <раздела from> (<from clause>).

<Имя кореляции> (<correlation name>), специфицированное в <ссылке на таблицу> (<table reference>), не должно совпадать ни с каким другим <именем кореляции> (<correlation name>), специфицированным в содержащем <разделе from> (<from clause>), и не должно совпадать с <идентификатором таблицы> (<table identifier>) какого-либо <имени таблицы> (<table name>), экспонирующегося в содержащем <разделе from> (<from clause>).

Областью действия <имен кореляции> (<correlation name>) и экспонируемых <имен таблиц> (<table name>) является наиболее внутренний <подзапрос> (<subquery>), <спецификация запроса> (<query specification>) или <оператор выборки> (<select statement>), содержащий <выражение, вырабатывающее таблицу> (<table expression>), в котором содержится данный <раздел from> (<from clause>). <Имя таблицы> (<table name>), которое специфицировано в <разделе from> (<from clause>), имеет область действия, определенную этим <разделом from> (<from clause>), если и только если это <имя таблицы> (<table name>) экспонируется в этом <разделе from> (<from clause>).


Если таблица, идентифицируемая <именем таблицы> (<table name>) является сгруппированным представлением, то <раздел from> (<from clause>) должен содержать в точности одну <ссылку на таблицу> (<table reference>).

a) Если <раздел from> (<from clause>) содержит единственное <имя таблицы> (<table name>), то описание результата <раздела from> (<from clause>) такое же, как описание таблицы, идентифицируемой этим <именем таблицы> (<table name>).

b) Если <раздел from> (<from clause>) содержит более одного <имени таблицы> (<table name>), то описание результата <раздела from> (<from clause>) является конкатенацией описаний таблиц, идентифицируемых этими <именами таблиц> (<table name>) в порядке, в котором <имена таблиц> (<table name>) появляются в <разделе from> (<from clause>).

Общие правила

Спецификация <имени кореляции> (<correlation name>) или экспонируемого <имени таблицы> (<table name>) в <ссылке на таблицу> (<table reference>) определяет это <имя кореляции> (<correlation name>) или экспонируемое <имя таблицы> (<table name>) как обозначатель таблицы, идентифицируемой <именем таблицы> (<table name>) этой <ссылки на таблицу> (<table reference>).

a) Если <раздел from> (<from clause>) содержит одно <имя таблицы> (<table name>), то результатом <раздела from> (<from clause>) является таблица, идентифицируемая этим <именем таблицы> (<table name>).

b) Если <раздел from> (<from clause>) содержит более одного <имени таблицы> (<table name>), то результатом <раздела from> (<from clause>) является расширенное прямое произведение таблиц, идентифицируемых этими <именами таблиц> (<table name>). Расширенное прямое произведение R есть мультимножество всех строк r таких, что r является конкатенацией строк из всех идентифицированных таблиц в том порядке, в котором они идентифицировались. Мощность R есть произведение мощностей идентифицированных таблиц. Порядковая позиция столбца в R есть n + s, где n порядковая позиция порождающего столбца в именованной таблице T, и s есть сумма степеней всех таблиц, идентифицированных до T в <разделе from> (<from clause>).


<Раздел group by> (<group by clause>)


Функция

Специфицирует сгруппированную таблицу, порождаемую применением <раздела group by> (<group by clause>) к результату предыдущего раздела.

Формат

<group by clause> ::=

GROUP BY <column specification>

[{ ,<column specification> }...]

Синтаксические правила

Пусть T обозначает описание результата предшествующего <раздела from> (<from clause>) или <раздела where> (<where clause>).

Каждая <спецификация столбца> (<column specification>) в <разделе group by> (<group by clause>) должна недвусмысленно ссылаться на столбец T. Столбец, указываемый в <разделе group by> (<group by clause>), есть столбец группирования.

Общие правила

Пусть R обозначает результат предыдущего <раздела from> (<from clause>) или <раздела where> (<where clause>).

Результатом <раздела group by> (<group by clause>) является разбиение R на множество групп. Это множество состоит из минимального числа групп таких, что для каждого столбца группирования каждой группы, включающей более одной строки, все значения этого столбца группирования равны.

Каждая строка данной группы содержит одно и то же значение данного столбца группирования. Когда <условие поиска> (<search condition>) применяется к группе, ссылка на столбец группирования является ссылкой на это значение.



<Раздел having> (<having clause>)


Функция

Специфицирует ограничение на сгруппированную таблицу, являющуюся результатом предыдущего <раздела group by> (<group by clause>) или <раздела from> (<from clause>), путем исключения групп, не удовлетворяющих <условию поиска> (<search condition>).

Формат

<having clause> ::=

HAVING <search condition>

Синтаксические правила

Пусть T обозначает описание результат предшествующего <раздела from> (<from clause>), <раздела where> (<where clause>) или <раздела group by> (<group by clause>). Каждая <спецификация столбца> (<column speification>), непосредственно содержащаяся в <условии поиска> (<search condition>), должна недвусмысленно указывать на столбец группирования T или являться внешней ссылкой.


Замечание: "Внешняя ссылка" определяется в , "<спецификация столбца> (<column specification>)" .

Каждая <спецификация столбца> (<column specification>), содержащаяся в <подзапросе> (<subquery>) в <условии поиска> (<search condition>) и указывающая на столбец T, должна ссылаться на столбец группирования T или должна быть специфицирована внутри <спецификации функции над множеством> (<set function specification>).

Общие правила

Пусть R обозначает результат предшествующего <раздела from> (<from clause>), <раздела where> (<where clause>) или <раздела group by> (<group by clause>). Если этот раздел не есть <раздел group by> (<group by clause>), то R состоит из одной группы и не обладает столбцом групирования.

<Условие поиска> (<search condition>) прмменяется к каждой группе R. Результат <раздела having> (<having clause>) является сгруппированной таблицей, содержащей те группы из R, для которых результат <условия поиска> (<search condition>) есть true.

Когда <условие поиска> (<search condition>) применяется к данной группе R, эта группа является аргументом или источником аргумента каждой <спецификации функции над множеством> (<set funtion specification>), прямо содержащейся в <условии поиска> (<search condition>), если только <спецификация столбца> (<column specification>) в <спецификации функции над множеством> (<set function specification>) не является внешней ссылкой.


Замечание: "Внешняя ссылка" определяется в , "<спецификация столбца> (<column specification>)".

Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически вычисляется для каждой группы R и результат используется при применении <условия поиска> (<search condition>) к данной группе R. Если какой-либо <подзапрос> (<subquery>) содержит внешнюю ссылку на столбец R, то эта ссылка указывает на значения этого столбца в данной группе R.


Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> (<column specification>)".

| |



<Раздел where> (<where clause>)


Функция

Специфицирует таблицу, получаемую применением <условия поиска> (<search condition>) к результату прешествующего <раздела from> (<from clause>).

Формат

<where clause> ::=

WHERE <search condition>

Синтаксические правила

Пусть T обозначает описание результата предшествующего <раздела from> (<from clause>). Каждая <спецификация столбца> (<column specification>), прямо содержащаяся в <условии поиска> (<search condition>), должна однозначно ссылаться на столбец T или являться внешней ссылкой.


Замечание: "Внешняя ссылка" определяется в , "<спецификация столбца> (<column specification>)" .

<Выражение, вырабатывающее значение> (<value expression>), прямо содержащееся в <условии поиска> (<search condition>), не должно включать ссылку на столбец, порождаемый функцией.

Если <выражение, вырабатывающее значение> (<value expression>), прямо содержащееся в <условии поиска> (<search condition>), является <спецификацией функции над множеством> (<set function specification>), то <раздел where> (<where clause>) должен содержаться в <разделе having> (<having clause>), и <спецификация столбца> (<column specification>) в <спецификации функции над множеством> (<set function specification>) не должна являться внешней ссылкой.


Замечание: "Внешняя ссылка" определяется в , "<спецификация столбца> (<column specification>)" .

Общие правила

Пусть R обозначает результат <раздела from> (<from clause>).

<Условие поиска> (<search condition>) применяется к каждой строке R. Результатом <раздела where> (<where clause>) является таблица из тех строк R, для которых результат <условия поиска> (<search condition>) есть true.

Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически выполняется для каждой строки R, и результаты используются при применении <условия поиска> (<search condition>) к данной строке R. Если некоторый <подзапрос> (<subquery>) содержит внешнюю ссылку на столбец R, то эта ссылка указывает на значение этого столбца в данной строке R.


Замечание: "Внешняя ссылка" определяется в , "<спецификация столбца> (<column specification>)" .



<Условие поиска> (<search condition>)


Функция

Специфицирует условие, которое может быть "true", "false" или "unknown" в зависимости от результата применения булевских операторов к указанным условиям.

Формат

<search condition> ::=

<boolean term>

| <search condition> OR <boolean term>

<boolean term> ::=

<boolean factor>

| <boolean term> AND <boolean factor>

<boolean factor> ::=

[NOT] <boolean primary>

<boolean primary> ::=

<predicate> | (<search condition>)

Синтаксические правила

<Спецификация столбца> (<column specification>) или <выражение, вырабатывающее значение> (<value expression>), указанные в <условии поиска> (<search condition>), непосредственно содержатся в этом <условии поиска> (<search condition>), если <спецификация столбца> (<column specification>) или <выражение, вырабатывающее значение> (<value expression>) не указываются внутри <спецификации функции над множеством> (<set function specification>) или <подзапроса> (<subquery>) этого <условия поиска> (<search condition>).

Общие правила

Результат получается применением указанных булевских операторов к условиям, являющимся результатами применения каждого указанного <предиката> (<predicate>) к данной строке таблицы или данной группе сгруппированной таблицы. Если булевские операторы не указаны, то результатом <условия поиска> (<search condition>) является результат указанного <предиката> (<predicate>).

NOT(true) есть false, NOT(false) есть true и NOT(unknown) есть unknown. AND и OR определяются следующими таблицами истинности:

ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї

іAND іtrue іfalse іunknownі

ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

іtrue іtrue іfalse іunknownі

ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

іfalse іfalse іfalse іfalse і

ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

іunknown іunknown іfalse іunknownі


АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ

ЪДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДї

іOR іtrue іfalse іunknownі

ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

іtrue іtrue іtrue іtrue і

ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

іfalse іtrue іfalse іunknownі

ГДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДґ

іunknown іtrue іunknown іunknownі

АДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДЩ

Сначала вычисляются выражения в скобках. Когда порядок вычисления не определяется скобками, NOT применяется перед AND, AND применяется перед OR, и операторы с одинаковым уровнем предшествования применяются слева направо.

Когда <условие поиска> (<search condition>) применяется к строке таблицы, каждая ссылка на столбец этой таблицы через <спецификацию столбца> (<column specification>), прямо содержащуюся в <условии поиска> (<search condition>), является ссылкой на значение этого столбца в этой строке.


<Выражение, вырабатывающее таблицу> (<table expression>)


Функция

Специфицирует таблицу или сгруппированную таблицу.

Формат

<table expression> ::=

<from clause>

[<where clause>]

[<group by clause>]

[<having clause>]

Синтаксические правила

Если таблица, идентифицируемая в <разделе from> (<from clause>), является сгруппированным представлением, то <выражение, вырабатывающее таблицу> (<table expression>) не должно содержать <раздела where> (<where clause>), <раздела group by> (<group by clause>) или <раздела having> (<having clause>).

Общие правила

Если все необязательные разделы опущены, то результирующая таблица является результатом <раздела from> (<from clause>). В противном случае каждый указанный раздел применяется к результату раздела, указанного перед ним, и результирующая таблица является результатом применения последнего указанного раздела. Результатом <выражения, вырабатывающее таблицу> (<table expression>) является порожденная таблица, в которой i-ый столбец наследует описание i-ого столбца таблицы, специфицированной через <раздел from> (<from clause>).