diff --git a/docs/_data/menu-sql.yaml b/docs/_data/menu-sql.yaml index 46dc4f3388cbd..059a9bdc1af43 100644 --- a/docs/_data/menu-sql.yaml +++ b/docs/_data/menu-sql.yaml @@ -85,6 +85,8 @@ url: sql-ref-datetime-pattern.html - text: Number Pattern url: sql-ref-number-pattern.html + - text: Operators + url: sql-ref-operators.html - text: Functions url: sql-ref-functions.html - text: Identifiers diff --git a/docs/sql-ref-operators.md b/docs/sql-ref-operators.md new file mode 100644 index 0000000000000..102e45fba8d20 --- /dev/null +++ b/docs/sql-ref-operators.md @@ -0,0 +1,124 @@ +--- +layout: global +title: Operators +displayTitle: Operators +license: | + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--- + +An SQL operator is a symbol specifying an action that is performed on one or more expressions. Operators are represented by special characters or by keywords. + +### Operator Precedence + +When a complex expression has multiple operators, operator precedence determines the sequence of operations in the expression, +e.g. in expression `1 + 2 * 3`, `*` has higher precedence than `+`, so the expression is evaluated as `1 + (2 * 3) = 7`. +The order of execution can significantly affect the resulting value. + +Operators have the precedence levels shown in the following table. +An operator on higher precedence is evaluated before an operator on a lower level. +In the following table, the operators in descending order of precedence, a.k.a. 1 is the highest level. +Operators listed on the same table cell have the same precedence and are evaluated from left to right or right to left based on the associativity. + +
Precedence | +Operator | +Operation | +Associativity | +
---|---|---|---|
1 | +. [] :: |
+ member access element access cast |
+ Left to right | +
2 | ++ - ~ |
+ unary plus unary minus bitwise NOT |
+ Right to left | +
3 | +* / % DIV |
+ multiplication division, modulo integral division |
+ Left to right | +
4 | ++ - || |
+ addition subtraction concatenation |
+ Left to right | +
5 | +<< >> >>> |
+ bitwise shift left bitwise shift right bitwise shift right unsigned |
+ Left to right | +
6 | +& | +bitwise AND | +Left to right | +
7 | +^ | +bitwise XOR(exclusive or) | +Left to right | +
8 | +| | +bitwise OR(inclusive or) | +Left to right | +
9 | +=, == <>, != <, <= >, >= |
+ comparison operators | +Left to right | +
10 | +NOT, ! EXISTS |
+ logical NOT existence |
+ Right to left | +
11 | +BETWEEN IN RLIKE, REGEXP ILIKE LIKE IS [NULL, TRUE, FALSE] IS DISTINCT FROM |
+ other predicates | +Left to right | +
12 | +AND | +conjunction | +Left to right | +
13 | +OR | +disjunction | +Left to right | +