Синтаксис языка запроса
Данная статья не дает никаких объяснений. В ней просто представлены конструкции и функции SQL, которые могут использоваться в <%AG %>. Дело в том, что обучение читателя языку запросов SQL не является целью данного руководства. Если вы недостаточно хорошо знакомы с этой темой, мы крайне рекомендуем вам обратиться к ссылкам на источник, указанным в статье Запросы. |
Каждый запрос, сформированный при помощи языка запросов SberMobile, имеет следующий синтаксис:
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"
Литералы
Язык запросов SberMobile определяет несколько типов литералов:
- Литерал 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', ...)