Where 和 Operator
SQL operator 是一系列用于比较的函数,广泛用于 select 语句的 where 子句中。
算术运算符
算术运算符通常出现在包含左操作数、右操作数以及最常见的左操作数的表达式中。
+ 和 -
+ 和 - 可以用作一元运算符或二元运算符。当用作一元运算符时,例如 +1、-2.5 或 -col_name,表示该值乘以 +1 或 -1。
因此,一元运算符 + 返回不变的值,而一元运算符 - 更改该值的符号位。
用户可以叠加两个一元运算符,例如 +5(返回正值)、-+2 或 +-2(返回负值),但用户不能使用两个连续的 - 符号。
因为 -- 在以下语句中被解释为注释(当用户可以使用两个符号时,两个符号之间需要一个空格或括号,例如 -(-2) 或 - -2,实际上会产生 +2)。
当 + 或 - 是二元运算符时,例如 2+2、3+1.5 或 col1+col2,表示左值加上或减去右值。左值和右值都必须是数值类型。
* 和 /
* 和 / 分别表示乘法和除法。两侧的操作数必须是数据类型。当两个数字相乘时。
如果需要,可以提升较小的操作数(例如,将 SMALLINT 提升为 INT 或 BIGINT),并且表达式的结果将提升为下一个更大的类型。
例如,TINYINT 乘以 INT 将产生 BIGINT 类型的结果。当两个数字相乘时,操作数和表达式结果都被解释为 DOUBLE 类型,以避免精度损失。
如果用户想要将表达式的结果转换为另一种类型,则需要使用 CAST 函数进行转换。
%
求模运算符。返回左操作数除以右操作数的余数。左操作数和右操作数都必须是整数。
&、| 和 ^
按位运算符返回对两个操作数执行按位与、按位或、按位异或运算的结果。两个操作数都需要整数类型。
如果按位运算符的两个操作数的类型不一致,则将较小类型的操作数提升为较大类型的操作数,并执行相应的按位运算。
一个表达式中可以出现多个算术运算符,用户可以将相应的算术表达式括在括号中。算术运算符通常没有相应的数学函数来表达与算术运算符相同的功能。
例如,我们没有 MOD() 函数来表示 % 运算符。相反,数学函数没有相应的算术运算符。例如,幂函数 POW() 没有对应的 ** 指数运算符。
用户可以通过数学函数部分了解我们支持哪些算术函数。
BETWEEN 运算符
在 WHERE 子句中,表达式可以与上限和下限进行比较。如果表达式大于或等于下限,且小于或等于上限,则比较结果为 true。
语法:
expression BETWEEN lower_bound AND upper_bound
数据类型:通常表达式会评估为数值类型,但也支持其他数据类型。如果必须确保下限和上限都是可比较的字符,则可以使用 cast() 函数。
使用说明:如果操作数是字符串类型,请注意,以上限开头的长字符串将与大于上限的上限不匹配。例如,"between'A'and'M' 将不匹配 'MJ'"。
如果需要确保表达式正常工作,可以使用 upper()、lower()、substr()、trim() 等函数。
示例:
select c1 from t1 where month between 1 and 6;
比较运算符
比较运算符用于比较两个值。=、!=、>= 适用于所有数据类型。
<> 和 != 运算符是等效的,表示两个值不相等。
IN 运算符
In 操作符用于与 VALUE 集合进行比较,如果 VALUE 集合中存在任何一个元素与参数匹配,则返回 TRUE。
参数和 VALUE 集合必须是可比较的。所有使用 IN 操作符的表达式都可以写成用 OR 连接的等效比较,但 IN 的语法更简单、更精确,并且更容易让 StarRocks 进行优化。
示例:
select * from small_table where tiny_column in (1,2);
LIKE 运算符
该 operator 用于字符串的比较。_(下划线)匹配单个字符,% 匹配多个字符。参数必须与完整字符串匹配。通常,将 % 放在字符串的末尾会更实用。
示例:
mysql> select varchar_column from small_table where varchar_column like 'm%';
+----------------+
|varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.02 sec)
mysql> select varchar_column from small_table where varchar_column like 'm____';
+----------------+
| varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.01 sec)
逻辑运算符
逻辑运算符返回 BOOL 值,包括单元和多元运算符,每个运算符处理的参数都是返回 BOOL 值的表达式。支持的运算符包括:
AND:二元运算符,如果左右参数的计算结果都为 TRUE,则 AND 运算符返回 TRUE。
OR:二元运算符,如果左右参数之一的计算结果为 TRUE,则返回 TRUE。如果两个参数都为 FALSE,则 OR 运算符返回 FALSE。
NOT:单元运算符,反转表达式的结果。如果参数为 TRUE,则运算符返回 FALSE;如果参数为 FALSE,则运算符返回 TRUE。
示例:
mysql> select true and true;
+-------------------+
| (TRUE) AND (TRUE) |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.00 sec)
mysql> select true and false;
+--------------------+
| (TRUE) AND (FALSE) |
+--------------------+
| 0 |
+--------------------+
1 row in set (0.01 sec)
mysql> select true or false;
+-------------------+
| (TRUE) OR (FALSE) |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.01 sec)
mysql> select not true;
+----------+
| NOT TRUE |
+----------+
| 0 |
+----------+
1 row in set (0.01 sec)
正则表达式运算符
确定是否匹配正则表达式。 使用 POSIX 标准正则表达式,“^”匹配字符串的第一部分,“$”匹配字符串的结尾。
“.” 匹配任何单个字符,“*” 匹配零个或多个选项,“+” 匹配一个或多个选项,“?” 表示贪婪表示等等。 正则表达式需要匹配完整的值,而不仅仅是字符串的一部分。
如果要匹配中间部分,则正则表达式的前面部分可以写成“^.” 或“.”。“^”和“$”通常被省略。 RLIKE 运算符和 REGEXP 运算符是同义词。
“|”运算符是一个可选运算符。“|”两侧的正则表达式只需要满足一个侧面条件。“|”运算符和两侧的正则表达式通常需要用 () 括起来。
例子:
mysql> select varchar_column from small_table where varchar_column regexp '(mi|MI).*';
+----------------+
| varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.01 sec)
mysql> select varchar_column from small_table where varchar_column regexp 'm.*';
+----------------+
| varchar_column |
+----------------+
| milan |
+----------------+
1 row in set (0.01 sec)