Синтаксис языка запроса

Данная статья не дает никаких объяснений. В ней просто представлены конструкции и функции SQL, которые могут использоваться в <%AG %>. Дело в том, что обучение читателя языку запросов SQL не является целью данного руководства. Если вы недостаточно хорошо знакомы с этой темой, мы крайне рекомендуем вам обратиться к ссылкам на источник, указанным в статье Запросы.

Каждый запрос, сформированный при помощи языка запросов AggreGate, имеет следующий синтаксис:

selectStatement

SELECT [ALL | DISTINCT]

{ selectExpression | tableAlias.fieldReference | tableAlias.* | * } [, ...]

FROM tableList

[WHERE expression]

[GROUP BY expression [, ...]]

[HAVING expression]

[{ UNION [ALL] | MINUS | INTERSECT } selectStatement]

[ORDER BY orderExpression) [, ...]]

[LIMIT <limit> [OFFSET <offset>]]

Раздел LIMIT может использоваться, только если все контекстные ссылки в разделе ОТ имеют альтернативные имена (например, "SELECT ... FROM context_reference AS alias LIMIT n, m").

tableList

table [joinedTables] [, ...]

joinedTables

joinedTable [joinedTable] [...]

joinedTable

{CROSS | INNER | LEFT OUTER | RIGHT OUTER | FULL OUTER} JOIN table ON expression

table

{ (selectStatement) [AS tableAlias] | contextReference [AS tableAlias]}

contextReference

См. Контекстные ссылки.

contextMask { :contextEntityReference [: ...] }

contextEntityReference

{ contextVariableName | contextVariableGroupName.* | contextFunctionName ( contextFunctionParameters ) }

contextFunctionParameters

{ null | 'value' | "value"} [, ...]

orderExpression

{ [tableAlias.]fieldReference | selectExpression } [ASC | DESC]

selectExpression

{ expression | COUNT(*) | {  COUNT | MIN | MAX | SUM | AVG }  ([ALL | DISTINCT] expression) } [[AS] label]

expression

[NOT] condition [{ OR | AND } condition]

condition

{

  value [|| value]

| value { = | < | <= | > | >= | <> | != } value

| value IS [NOT] NULL

| EXISTS(selectStatement)

| value BETWEEN value AND value

| value [NOT] IN ( {value [, ...] | selectStatement } )

| value [NOT] LIKE value [ESCAPE] value

}

value

[+ | -] { literal [{ + | - | * | / | || } literal]

| ( condition )

| function ( [parameter] [,...] )

| selectStatement giving one value

| {ANY|ALL} (selectStatement giving single column)

| INTERVAL literal {YEAR | MONTH | DAY | HOUR | MINUTE}

}

fieldReference

См. Ссылки на поля.

{ { contextVariableName | contextFunctionName} $ dataTableFieldName | writebackFieldName }

writebackFieldName

"CONTEXT_ID" | "PARENT_ID" | "RECORD_INDEX"

Литералы

Язык запросов AggreGate определяет несколько типов литералов:

  • Литерал Null: NULL
  • Логические литералы: TRUE или FALSE
  • Десятичные литералы (0, 1, 123, -1234567890, ...)
  • Шестнадцатиричные литералы (X'0A', X'FFFF', ...)
  • Двоичные литералы (B'01', B'00110011')
  • Литералы с плавающей точкой (3.1, -44.5, 1.3E12, ...)
  • Строковые литералы ('This is a String', 'test', ...)