RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

1. Синтаксис

expr:

literal-value bind-parameter schema-name . table-name . column-name unary-operator expr expr binary-operator expr function-name ( function-arguments ) filter-clause over-clause ( expr ) , CAST ( expr AS type-name ) expr COLLATE collation-name expr нетT LIKE GLOB REGEXP MATCH expr expr ESCAPE expr expr ISNULL нетTNULL нетT NULL expr IS нетT DISTINCT FROM expr expr нетT BETWEEN expr AND expr expr нетT IN ( select-stmt ) expr , schema-name . table-function ( expr ) table-name , нетT EXISTS ( select-stmt ) CASE expr WHEN expr THEN expr ELSE expr END raise-function

filter-clause:

function-arguments:

literal-value:

over-clause:

raise-function:

select-stmt:

type-name:

2. Операторы и затрагивающие разбор признаки

SQLite понимает этих операторов, перечисленных в порядке precedence1
(от начала до конца / самый высокий к самому низкому):

Операторы 2
[expr]     + [expr]     - [expr]
[expr]  COLLATE (collation-name) 3
||   ->   ->>
*   /   %
+   -
&  |   <<  >>
[expr]  ESCAPE [escape-character-expr] 4
<  >  <=  >=
=  ==  <>  !=  IS   IS NOT
IS DISTINCT FROM   IS NOT DISTINCT FROM
[expr] BETWEEN5 [expr] AND [expr]
IN5  MATCH5  LIKE5  REGEXP5  GLOB5
[expr] ISNULL   [expr] NOTNULL    [expr] NOT NULL
нетT [expr]
AND
OR
  1. Операторы, показанные в той же самой ячейке таблицы, разделяют порядок.
  2. "[expr]" обозначает местоположения операнда для небинарных операторов.
      Операторы без "[expr]" дополнение двоичное и левоассоциативное.
  3. COLLATE (с именем сопоставления) действует как единственный постфиксный оператор.
  4. ESCAPE (с его символом ESC) действует как единственный постфиксный оператор.
      Это можно связать только с предыдущим выражением [expr] LIKE [expr].
  5. Each Каждое ключевое слово в (BETWEEN IN GLOB LIKE MATCH REGEXP) может иметь префикс
      NOT, сохраняя предшествование и ассоциативность голого оператора.

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

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

Обратите внимание на то, что есть два варианта операторов равенства и неравенства. Равняется может быть = или ==. Неравенство может быть также != или <>. || это "concatenate", это объединяет две строки своих операндов. -> и ->> это "extract", они извлекают компонент RHS из LHS. Для примера см. здесь.

% приводит оба своих операнда к типу INTEGER и затем вычисляет остаток после деления левого целого числа на правое. Другие арифметические операторы выполняют арифметику целого числа, если оба операнда целые числа, и никакое переполнение не произойдет, или арифметику с плавающей точкой IEEE Standard 754, если операнд действительное значение или арифметика целого числа произвела бы переполнение.

Результат любого бинарного оператора это числовое значение или NULL, за исключением оператора связи || и операторов извлечения -> и ->>, которые оценивают к NULL или к текстовому значению.

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

Когда соединено с NULL:
  AND будет 0 (false), когда другой операнд false,
  OR будет 1 (true), когда другой операнд true.

IS и IS NOT работают подобно = и !=, кроме тех случаев, когда один или оба из операндов NULL. В этом случае, если оба операнда NULL, то оператор IS оценивается к 1 (true), IS NOT оценивается к 0 (false). Если один операнд NULL, а другой нет, то оператор IS оценивается к 0 (false), IS NOT оценивается к 1 (true). Невозможно IS или IS NOT оценить как NULL.

IS NOT DISTINCT FROM является альтернативным правописанием для оператора IS. Аналогично IS DISTINCT FROM имеет в виду то же самое, как IS NOT. Стандартный SQL не поддерживает компактный вариант IS и IS NOT. Эти компактные формы это расширение SQLite. Необходимо использовать намного менее удобочитаемое IS NOT DISTINCT FROM и IS DISTINCT FROM в других системах SQL.

3. Литеральные значения (константы)

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

Синтаксис для целого числа и литералов с плавающей точкой (коллективно "числовые литералы") показывает следующая диаграмма:

numeric-literal:

digit . E e digit . digit - digit + 0x hexdigit

Если у числового литерала есть десятичная точка или пункт возведения в степень, если это меньше -9223372036854775808 или больше 9223372036854775807, то это литерал с плавающей точкой. Иначе он буквальное целое число. Символ "E", который начинает пункт возведения в степень литерала с плавающей точкой, может быть верхним или нижним регистром. Символ "." всегда используется в качестве десятичной точки, даже если урегулирование места действия определяет "," для этой роли, использование "," для десятичной точки привело бы к синтаксической двусмысленности.

Шестнадцатеричные литералы целого числа следуют нотации языка C "0x" или "0X", сопровождаемого шестнадцатеричными цифрами. Например, 0x1234 означает то же самое, как 4660, 0x8000000000000000 это -9223372036854775808. Шестнадцатеричные литералы целого числа интерпретируются как 64-битные two's-дополнительные целые числа и таким образом ограничиваются шестнадцатью значащими цифрами точности. Поддержка шестнадцатеричных целых чисел была добавлена в SQLite version 3.8.6 (2014-08-15). Для совместимости шестнадцатеричная нотация "0x" целого числа понята только языковым анализатором SQL, не правилами преобразований типов. Строковые переменные, которые содержат текст, отформатированный как шестнадцатеричные целые числа, не интерпретируются как шестнадцатеричные целые числа, переводя значения последовательности в целое число из-за выражения CAST или для близости столбцов до выполнения числовой операции или для любых других преобразований во время выполнения. Когда преобразование последовательности оценивается в формате шестнадцатеричного целого числа в целочисленное значение, процесс преобразования останавливается, когда символ 'x' замечен, так что получающееся целочисленное значение всегда ноль. SQLite понимает только шестнадцатеричную нотацию целого числа, когда появляется в тексте SQL-оператора, но не когда это появляется как часть содержания базы данных.

Строковая константа сформирована, приложив последовательность в одинарных кавычках ('). Одинарная кавычка в последовательности может быть закодирована, поместив две одинарных кавычки подряд, как в Pascal. Экранировка C-стиля, используя символ наклонной черты влево не поддерживается, потому что это не стандартный SQL.

Литералы BLOB это строковые литералы, содержащие шестнадцатеричные данные, предваренные одним символом "x" или "X". Например: X'53514C697465'.

Литеральное значение может также быть токеном "NULL".

4. Параметры

Символ "переменной" или "параметра" определяет заполнитель в выражении для значения, которое заполнено во время выполнения, используя sqlite3_bind(). Параметры могут принять несколько форм:

?NNN Вопросительный знак, сопровождаемый числом NNN, место для NNN-го параметра. NNN должен быть между 1 и SQLITE_MAX_VARIABLE_NUMBER .
? Вопросительный знак, который не сопровождается числом, создает параметр с номером на один больше, чем самый большой номер уже назначенного параметра. Если это означает, что номер параметра больше, чем SQLITE_MAX_VARIABLE_NUMBER, это ошибка. Этот формат параметра обеспечивается для совместимости с другими ядрами базы данных. Но потому что легко просчитать вопросительные знаки, использованию этого формата параметра препятствуют. Программисты поощряются использовать один из символических форматов ниже или формат ?NNN.
:AAAA Двоеточие, сопровождаемое именем идентификатора, место для названного параметра с именем :AAAA. Названные параметры также пронумерованы. Назначенное число на один больше, чем самый большой уже назначенный номер параметра. Если это означает, что параметру назначили бы число, больше SQLITE_MAX_VARIABLE_NUMBER, это ошибка. Чтобы избежать беспорядка, лучше избегать смешивать названные и пронумерованные параметры.
@AAAA Символ "at" работает точно как двоеточие, за исключением того, что название созданного параметра @AAAA.
$AAAA Знак доллара, сопровождаемый именем идентификатора, также место для названного параметра с именем $AAAA. Имя идентификатора в этом случае может включать одни или более "::" и суффикс, приложенный в "(...)", содержащий любой текст вообще. Этот синтаксис это форма имени переменной на Tcl. Присутствие этого синтаксиса следует из того, что SQLite действительно расширение Tcl.

Параметры, которым не назначают значения через sqlite3_bind(), рассматривают как NULL. sqlite3_bind_parameter_index() может использоваться, чтобы перевести символическое название параметра в его эквивалентный числовой индекс.

Максимальный номер параметра определяется во время компиляции макросом SQLITE_MAX_VARIABLE_NUMBER. Отдельное соединение с базой данных D может сократить свое максимальное количество параметров ниже максимума времени компиляции с использованием sqlite3_limit(D, SQLITE_LIMIT_VARIABLE_NUMBER,...).

5. LIKE, GLOB, REGEXP, MATCH и операторы извлечения

Оператор LIKE делает сравнение сопоставления с образцом. Операнд направо от оператора LIKE содержит образец, и левый операнд содержит последовательность, чтобы соответствовать. Символ процента ("%") в шаблоне LIKE соответствует любой последовательности из ноля или большего количества знаков в последовательности. Подчеркивание ("_") в шаблоне LIKE соответствует любому отдельному символу в последовательности. Любой другой символ соответствует себе или его эквивалентному нижнему/верхнему регистру (то есть, нечувствительное к регистру соответствие). ВАЖНО: SQLite понимает верхний/нижний регистр только для знаков ASCII по умолчанию. Оператор LIKE чувствительный к регистру по умолчанию для unicode-знаков, которые вне диапазона ASCII. Например, выражение 'a' LIKE 'A' = TRUE, но 'æ' LIKE 'Æ' = FALSE. Расширение ICU к SQLite включает расширенную версию оператора LIKE, который действительно обрабатывает все unicode-знаки.

Если есть ESCAPE, то выражение после ключевого слова ESCAPE должно оцениться к последовательности, состоящей из отдельного символа. Этот символ может использоваться в образце LIKE, чтобы включать буквальный процент или символы подчеркивания. Символ ESC, сопровождаемый символом процента (%), подчеркивания (_) или вторым экземпляром самого символа ESC соответствует буквальному символу процента, подчеркивания или единственному символу ESC, соответственно.

Оператор LIKE осуществляется, вызывая определенные применением функции SQL like(Y,X) или like(Y,X,Z).

Оператор LIKE может быть сделан чувствительным к регистру использованием case_sensitive_like pragma.

Оператор GLOB подобен LIKE, но использует синтаксис файла Unix globbing для его подстановочных знаков. Кроме того, GLOB чувствительный к регистру, в отличие от LIKE. GLOB и LIKE может предшествовать NOT, чтобы инвертировать смысл теста. Оператор GLOB осуществляется, вызывая функцию glob(Y,X) и может быть изменен, отвергнув ту функцию.

Оператор REGEXP это специальный синтаксис для функции пользователя regexp(). Никакой функции пользователя regexp() не определяется по умолчанию и таким образом, использование оператора REGEXP будет обычно приводить к сообщению об ошибке. Если определенная применением функция SQL "regexp" будет добавлена во время выполнения, то оператор "X REGEXP Y" будет осуществлен как вызов "regexp(Y,X)".

Оператор MATCH это специальный синтаксис для определенной применением функции match(). По умолчанию реализация функции match() поднимает исключение и ни для чего не полезна. Но расширения могут перекрыть match() с более полезной логикой.

Операторы извлечения действуют как специальный синтаксис для функций "->"() и "->>"(). Реализации по умолчанию для этих функций выполняют извлечение субкомпонента JSON, но расширения могут отвергнуть их для других целей.

6. Оператор BETWEEN

Оператор BETWEEN логически эквивалентен паре сравнений. "x BETWEEN y AND z" эквивалент "x>=y AND x<=z" за исключением того, что с BETWEEN выражение x оценено только однажды.

7. Выражение CASE

Выражение CASE служит роли, подобной IF-THEN-ELSE на других языках программирования.

Дополнительное выражение, которое происходит между ключевым словом CASE и первым ключевым словом WHEN, называют "основным". Есть две фундаментальных формы выражения CASE: с основным выражением и без.

В CASE без основного выражения оценено каждое выражение WHEN, и результат рассматривается как boolean, начиная с крайнего левого и далее вправо. Результат выражения CASE это оценка выражения THEN, которое соответствует первому выражению WHEN, которое оценивается к true. Или, если ни одно из выражений WHEN не оценивается к true, результат оценки выражения ELSE, если таковой имеется. Если нет никакого выражения ELSE, и ни одно из выражений WHEN не верно, то полный результат NULL.

Результат NULL считают неверным, оценивая условия WHEN.

В CASE с основным выражением основное выражение оценено только однажды, и результат сравнен с оценкой каждого выражения WHEN слева направо. Результат выражения CASE это оценка выражения THEN, которое соответствует первому выражению WHEN, для которого сравнение верно. Или, если ни одно из выражений WHEN не оценивается к значению, равному основному выражению, результат оценки выражения ELSE, если таковой имеется. Если нет никакого выражения ELSE, и ни одно из выражений WHEN не приводит к результату, равному основному выражению, полный результат NULL.

Сравнивая основное выражение с выражением WHEN, та же самая последовательность сопоставления, близость и правила обработки NULL применяются, как будто основное выражение и выражение WHEN соответственно левый и правый операнды оператора =.

Если основное выражение NULL, тогда результат CASE всегда результат оценки выражения ELSE, если это существует, или NULL, если это не так.

Единственная разница между следующими двумя выражениями CASE это то, что x оценено точно однажды в первом примере, но могло бы быть оценено многократно во втором:

  • CASE x WHEN w1 THEN r1 WHEN w2 THEN r2 ELSE r3 END
  • CASE WHEN x=w1 THEN r1 WHEN x=w2 THEN r2 ELSE r3 END

Встроенная SQL-функция iif(x,y,z) логически эквивалентна "CASE WHEN x THEN y ELSE z END". iif() найдена в SQL Server и включена в SQLite для совместимости. Некоторые разработчики предпочитают iif() потому, что это более кратко.

8. Операторы IN и NOT IN

Операторы IN и NOT IN берут выражение слева и список значений или подзапрос справа. Когда правый операнд IN или NOT IN это подзапрос, у него должно быть то же самое количество колонок, как в row value левого операнда. Подзапрос справа от IN или NOT IN должен быть скалярным подзапросом, если левое выражение не row value. Если правый операнд IN или NOT IN это список значений, каждое из них должно быть скаляром, и левое выражение должно также быть скаляром. Правая сторона IN или NOT IN может быть именем таблицы или табличной функции, в этом случае правая сторона, как понимают, является подзапросом формы "(SELECT * FROM name)". Когда правый операнд это пустое множество, результат IN = false, результат NOT IN = true, независимо от левого операнда и даже если левый операнд NULL.

Результат IN или NOT IN определяется следующей матрицей:

Левый операнд
NULL
Правый операнд
содержит NULL
Правый операнд
пустое множество
Левый операнд есть
в правом операнде
Результат
IN
Результат
NOT IN
нет нет нет нет false true
не имеет значения нет да нет false true
нет не имеет значения нет да true false
нет да нет нет NULL NULL
да не имеет значения нет не имеет значения NULL NULL

Обратите внимание на то, что SQLite позволяет введенному списку скалярных величин на правой стороне IN или NOT IN быть пустым списком, но большинство других систем базы данных SQL и стандарт SQL92 требуют, чтобы список содержал по крайней мере один элемент.

9. Названия столбца таблицы

Имя столбца может быть любым из имен, определенных в CREATE TABLE или одним из следующих специальных идентификаторов: "ROWID", "OID" или "_ROWID_". Три специальных идентификатора описывают уникальный ключ целого числа (rowid), связанный с каждой строкой таблицы и недоступны на таблицах WITHOUT ROWID. Специальные идентификаторы относятся только к ключу строки, если CREATE TABLE не определяет реальную колонку с тем же самым именем. rowid может использоваться где угодно, где используется имя столбца.

10. Оператор EXISTS

Оператор EXISTS всегда оценивается к одному из целочисленных значений 0 или 1. Если выполнение оператора SELECT, определенного как правый операнд оператора EXISTS, возвратило бы одну или несколько строк, тогда оператор EXISTS оценивается к 1. Если выполнение SELECT не возвратило бы строк вообще, тогда оператор EXISTS оценивается к 0.

Количество колонок в каждой строке из SELECT (если таковые имеются) и определенные возвращенные значения не имеет никакого эффекта на результаты оператора EXISTS. В частности строки, содержащие значения NULL, не обработаны по-другому по сравнению со строками без значений NULL.

11. Выражения подзапросов

SELECT, приложенный в круглых скобках, является подзапросом. Все типы оператора SELECT, включая совокупные и составные запросы Select (запросы с ключевыми словами UNION или EXCEPT) позволены как скалярные подзапросы. Значение выражения подзапроса это первая строка результата вложенного SELECT. Значение выражения подзапроса NULL, если вложенный SELECT не вернул строк.

Подзапрос, который возвращает отдельный столбец, является скалярным подзапросом и может использоваться где угодно. Подзапрос, который возвращает две или больше колонки, является подзапросом row value и может использоваться только в качестве операнда оператора сравнения или как значение в UPDATE SET, у списка имен столбца которого есть тот же самый размер.

12. Связанные подзапросы

SELECT, используемый в качестве скалярного подзапроса или в качестве правого операнда IN, NOT IN или EXISTS, может содержать ссылки на колонки во внешнем запросе. Такой подзапрос известен как связанный подзапрос. Связанный подзапрос переоценен каждый раз, когда его результат требуется. Некоррелированый подзапрос оценен только однажды и результат снова использован по мере необходимости.

13. Выражение CAST

Выражение CAST формы "CAST(expr AS type-name)" используется, чтобы преобразовать expr в другой класс хранения type-name. Преобразование CAST подобно преобразованию, которое происходит, когда близость колонки применяется к значению за исключением того, что с оператором CAST преобразование всегда происходит, даже если преобразование с потерями и необратимо, тогда как близость колонки изменяет тип данных только если изменение без потерь и обратимо.

Если значение expr = NULL, результат CAST тоже NULL. Иначе класс памяти результата определяется, применяя правила для определения близости колонки к type-name.

Близость type-name Конверсионная обработка
NONE Приводит значение к type-name без близости, заставляет значение быть преобразованным в BLOB. Приведение к BLOB состоит из первого приведения значения к TEXT в кодировке соединения с базой данных, затем интерпретируя получающуюся последовательность байт как BLOB вместо TEXT.
TEXT Для конвертации BLOB в TEXT последовательность байтов, которые составляют BLOB, интерпретируется как текст с использованием кодирования базы данных.

Преобразование INTEGER или REAL в TEXT транслирует значение как sqlite3_snprintf() за исключением того, что получающийся TEXT использует кодировку соединения с базой данных.

REAL Для преобразования BLOB в REAL, значение сначала преобразовывается в TEXT.

Затем самый длинный префикс значения, который может интерпретироваться как вещественное число, извлечен из TEXT, остаток игнорируется. Любые ведущие пробелы в TEXT тоже игнорируются. Если нет никакого префикса, который может интерпретироваться как вещественное число, результат преобразования 0.0.

INTEGER Для конвертации BLOB в INTEGER, значение сначала конвертируется в TEXT.

Затем самый длинный префикс значения, который может интерпретироваться как целое число, извлечен из TEXT, остаток игнорируется. Любые ведущие пробелы в TEXT тоже игнорируются. Если нет никакого префикса, который может интерпретироваться как integer, результат преобразования 0. Если префикс больше +9223372036854775807, результат точно +9223372036854775807. Точно так же, если целое число префикса меньше -9223372036854775808, результат -9223372036854775808.

Конвертируя к INTEGER, если текст похож на значение с плавающей точкой с экспонентой, экспонента будет проигнорирована, потому что это не входит в префикс целого числа. Например, "CAST('123e+5' AS INTEGER)" = 123, не 12300000.

Оператор CAST понимает десятичные целые числа только, преобразование hexadecimal integers остановится на "x" в префиксе "0x" шестнадцатеричной последовательности целого числа, и таким образом результат CAST всегда ноль.

Преобразование REAL в INTEGER приводит к целому числу между значением REAL и 0, которое является самым близким к значению REAL. Если REAL больше, чем самое большое целое число со знаком (+9223372036854775807), результат самое большое целое число со знаком, если REAL меньше, чем наименее возможное целое число со знаком (-9223372036854775808), результат наименьшее возможное целое число со знаком.

До SQLite version 3.8.2 (2013-12-06) преобразование REAL больше +9223372036854775807.0 в integer приводило к самому отрицательному целому числу -9223372036854775808. Это поведение предназначалось, чтобы подражать поведению оборудования x86/x64, делая эквивалентное преобразование.

NUMERIC Трансляция TEXT или BLOB в NUMERIC приводит к результату INTEGER или REAL. Если входной текст похож на целое число (нет никакой десятичной точки или экспоненты), и значение достаточно маленькое, чтобы поместиться в 64-битное целое число со знаком, то результатом будет INTEGER. Входной текст, который похож на плавающую точку (есть десятичная точка и/или экспонента) и текст, который описывает значение, которое может быть без потерь преобразовано назад и вперед между IEEE 754 64-bit float и 51-bit signed integer, то результат INTEGER. В предыдущем предложении определяется 51-битное целое число, так как это составляет на один бит меньше, чем длина мантиссы IEEE 754 64-bit float и таким образом обеспечивает 1 бит края для конверсионной операции текста к float. Любой ввод текста, который описывает значение вне диапазона 64-битного целого числа со знаком, приводит к результату REAL.

Преобразование REAL или INTEGER в NUMERIC ничего не делает, даже если действительное значение могло бы быть без потерь преобразовано в целое число.

Обратите внимание на то, что следствие трансляции любого не-BLOB в BLOB и трансляции любого BLOB в не-BLOB может отличаться в зависимости от того, является ли кодировка UTF-8, UTF-16be или UTF-16le.

14. Выражения Boolean

Язык SQL показывает несколько контекстов, где выражение оценено, и результат преобразовывается в булево значение (true или false). Эти контексты:

  • WHERE в SELECT, UPDATE или DELETE,
  • ON или USING соединения в операторе SELECT,
  • HAVING оператора SELECT
  • WHEN в триггере SQL
  • WHEN или пункты некоторых выражений CASE.

Чтобы преобразовать результаты SQL-выражения к булеву значению, SQLite сначала переводит результат к NUMERIC таким же образом, как CAST. Числовое нулевое значение (целочисленное значение 0 или действительное значение 0.0) считается false. NULL все еще NULL. Все другие значения считают true.

Например, значения NULL, 0.0, 0, 'english' и '0' все считаются false. Значения 1, 1.0, 0.1, -0.1 и '1english' true.

С SQLite 3.23.0 (2018-04-02), SQLite признает идентификаторы "TRUE" and "FALSE" как литералы boolean, если и только если те идентификаторы уже не используются для некоторого другого значения. Если там уже существует колонки или таблицы или другие объекты под названием TRUE или FALSE, то ради совместимости TRUE и FALSE относятся к тем другим объектам, а не к булевым значениям.

Булевы идентификаторы TRUE и FALSE обычно просто псевдонимы для целочисленных значений 1 и 0, соответственно. Однако, если TRUE или FALSE происходит на правой стороне оператора IS, то оператор IS оценивает левый операнд как булево значение и дает соответствующий ответ.

15. Функции

SQLite поддерживает многие простые, совокупные и оконные функции SQL. В целях представления простые функции далее подразделены на основные функции, функции даты и времени, математические функции и функции JSON. Приложения могут добавить новые функции, написанные на C/C++, используя sqlite3_create_function().

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

simple-function-invocation:

simple-func ( expr ) , *

aggregate-function-invocation:

aggregate-func ( DISTINCT expr ) filter-clause , * ORDER BY ordering-term ,

window-function-invocation:

window-func ( expr ) filter-clause OVER window-name window-defn , *

Пункт OVER требуется для функций окна и запрещается иначе. Ключевое слово DISTINCT и пункт ORDER BY позволены только в агрегатных функциях. Пункт FILTER может не появиться в простой функции.

Возможно иметь агрегатную функцию с тем же самым именем как простая функция, пока количество аргументов для двух форм функции отличается. Например, max() с отдельным аргументом это совокупность и max() с двумя или больше аргументами это простая функция. Агрегатные функции могут обычно также использоваться в качестве функций окна.