29 | | * String: CONCAT |
| 29 | * String: CONCAT, SUBSTR |
| 30 | |
| 31 | == SELECT Rules == |
| 32 | |
| 33 | {{{ |
| 34 | SELECT <field-list> FROM <table_def> |
| 35 | [LEFT JOIN <table_def> |
| 36 | ON [<table_ref>.]<key_field> = [<table_ref>.].<key_field>]* |
| 37 | [WHERE <where-expr>] |
| 38 | [ORDER BY <sort specification list>] |
| 39 | |
| 40 | <field-list> ::= <column-spec> [ { , <column-spec> }... ] |
| 41 | |
| 42 | <column-spec> ::= <field-spec> [ <as clause> ] |
| 43 | | CAST ( <field-spec> AS <data type> ) [ <as clause> ] |
| 44 | |
| 45 | <field-spec> ::= [DISTINCT] <field_ref> |
| 46 | | <cumm-field-func> ( [DISTINCT] <field-ref> ) |
| 47 | | <field-expr> |
| 48 | | Count(*) |
| 49 | |
| 50 | <field-expr> ::= <field_ref> |
| 51 | | <constant-value> |
| 52 | | <field-expr> <field-operator> <field-expr> |
| 53 | | <field-func> ( <field-expr-list> ) |
| 54 | | ( <field-expr> ) |
| 55 | |
| 56 | <field-expr-list> ::= field-expr |
| 57 | | field-expr , field-expr-list |
| 58 | | <empty> |
| 59 | |
| 60 | <as clause> ::= [ AS ] <column_name> |
| 61 | |
| 62 | <data type> ::= character [ ( field_length ) ] |
| 63 | | float [ ( field_length ) ] |
| 64 | | numeric [ ( field_length [, field_precision ] ) ] |
| 65 | | integer [ ( field_length ) ] |
| 66 | | date [ ( field_length ) ] |
| 67 | | time [ ( field_length ) ] |
| 68 | | timestamp [ ( field_length ) ] |
| 69 | |
| 70 | <cumm-field-func> ::= AVG | MAX | MIN | SUM | COUNT |
| 71 | |
| 72 | <field-operator> ::= '+' | '-' | '/' | '*' | '||' |
| 73 | |
| 74 | <field-func> ::= CONCAT | SUBSTR |
| 75 | |
| 76 | <field_ref> ::= [<table_ref>.]field_name |
| 77 | }}} |