运算符
算术运算符
注意:
- /(DIV):执行除法运算,用一个值除以另一个值得到商。
- %(MOD):执行求余运算,用一个值除以另一个值得到余数。
- 例1:
select 4+2,4-2,4*2,4/2,4%3;
在除法运算和求余运算中,如果除数为0将是非法运算,返回结果为NULL
- 例2:
select 6/0,9%0;
运算符不仅可以直接操作数值,还可以操作表中的字段。
- 例3:
select name 商品名, price 售价, price*num 总额 from good;
比较运算符
比较运算符的作用是将表达式中的两个操作数进行比较,比较结果为真,则返回1,为假则返回0,结果不确定则返回NULL。
注意:
- =(<=>):等于
- <>(!=):不等于
- between and:判断一个值是否在两个值之间
- in:判断一个值是否在某个集合中
- is null:判断一个值是否为null
- like:通配符匹配,判断一个值是否包含某个字符
- regexp:正则表达式匹配
常用比较运算符
- 等于运算符
例:
select 0=1,1=1,0.1=1,1='1','a'='a',(1+2)=(2+1),null=null,null<=>null;
如果两个操作数中有一个或两个值为NULL(空值),结果为空;
如果两个操作数分别为字符串和数值,系统会首先将字符串转换成数值,然后再进行比较。
- 不等于运算符
“<>”和“!=”用于判断数字、字符串和表达式是否不相等,
如果不相等则返回1,否则返回0。其用法与等于运算符用法相同,但不能操作NULL(空值)。
例:
select 1<>2, 2!=1,1.5<>1,'abc'<>'ab',(1+2)!=(1+1);
- 其他常用比较运算符
“<”“>”“<=”和“>=”4种运算符用于比较数字、字符串和表达式,
如果比较结果为真则返回1,否则返回0。这些运算符也不能操作NULL(空值)。
例:
select 1<1,2>=1,1.5<2,'a'<'aaa',(1+2)<=(1+2);
注意:
如果使用上述4种运算符进行比较的两个操作数为字符串,
系统会比较两个字符串的长度,但两个操作数不能一个为数值,一个为字符串。
实现特殊功能的比较运算符
实现特殊功能的比较运算符主要包括“BETWEEN AND”“IN”“IS NULL”“LIKE”和“REGEXP”
- regexp 通配符及其作用
regexp通配符 | 作用 | 例子 |
---|---|---|
^ | 匹配字符串的开始部分。 | 例如,^b匹配以字母b开始的字符串。 |
$ | 匹配字符串的结束部分。 | 例如,st$匹配以st结束的字符串。 |
. | 匹配除换行符‘\n’之外的任何单个字符。 | 例如,b.t匹配bit,bat,but等。 |
[…] | 匹配方括号中(字符集合)所包含的任意一个字符。 | 例如,[a-z]匹配字母表26个字母中的任意一个字母。 |
[^ …] | 匹配字符集合未包含的任意一个字符。 | 例如,‘[^a]’可以匹配除‘a’之外的任意一个字符。 |
p1|p2: | 匹配p1或p2。 | 例如,‘k|cat’能匹配‘k’或‘cat’。‘(k|c)at’可以匹配‘kat’或‘cat’。 |
* | 匹配符号*前面的零个或多个字符。 | 例如,‘ao*’能匹配‘a’以及‘aoo’,[0-9]*匹配任意数量的数字。 |
+ | 匹配符号+前面的字符一次或多次。 | 例如,‘ao+’能匹配‘ao’以及‘aoo’。 |
{n} | 匹配符号前面的字符至少n次。 | 例如,‘o{2}’能匹配‘food’,但不能匹配‘dog’。 |
{n,m} | 匹配符号前面的字符至少n次,至多m次。 | 例如,b{2,4}匹配包含至少2个,至多4个b的字符串。 |
- 例1:
select 'abc' regexp '^a','abc' regexp 'c$', 'abc' regexp '.bc','abc' regexp '[xy]';
- 例2:
select 'bcd' regexp 'a*d', 'bcd' regexp 'cc*d','bcd' regexp 'c+d', 'bcd' regexp 'b+d';
逻辑运算符
逻辑运算符又称为布尔运算符,用于确定表达式的真和假。
- 逻辑运算符:
- &&(AND):逻辑与(有0皆0;非零操作数,null——为null)
例: select 1&&1, 1 and 0,1 and null,0 and null;
- ||(OR):逻辑或(㈠一真或为真 ㈡全假或为假 ㈢0,null|null,null ——null)
例: select 1||1,0 or 0,1 or null,0 or null,null or null;
- !(NOT):逻辑非(㈠非null返否值 ㈡null就返回null)
例: select !0,not 1,not null;
- XOR:逻辑异或(①非null,同则0;异则1 ②有null就是null)
例: select 1 xor 1,0 xor 0, 1 xor 0,1 xor null,0 xor null, null xor null;
- &&(AND):逻辑与(有0皆0;非零操作数,null——为null)
位运算符
原理:操作数——> 二进制数——> (每位)进行指定的逻辑运算——> 转十进制数
- &: 位与(二进制时:①全1才1 ②有0皆为0)
例:
select 5&6,2&3&6;
解析:
0101 0010
0110 0011
———— 0110
0100 ————
0010
- |: 位或(①有1皆为1 ②全0才为0)
例:
select 5|6,2|3|6;
0101 0010
0110 0011
———— 0110
0111 ————
0111
- ^: 位异或(①异为1 ②同则0)
例:
select 10^15,2^2;
1010 0010
1111 0010
———— ————
0101 0000
- <<: 位左移(左移右补0)
例:
select 1<<2,5<<1;
0001 0101
<—2位 <—1位
0100 1010
>>
: 位右移(右移左补0)
例:
select 2>>1,5>>1;
0010 0101
1位—> 1位—>
0001 0010
- ~: 位取反(1取反后变0, 0取反后变1)
例:
select ~1, bin(~1);
bin(n)函数返回n的二进制值的字符串表示,其中n是一个长整型(bigint)数。
运算符的优先级
优先级 | 运算符 |
---|---|
最高 | ! |
2 | -(负号),~(按位取反) |
3 | ^(按位异或) |
4 | *,/(DIV),%(MOD) |
5 | +,- |
6 | >>,<< |
7 | & |
8 | | |
9 | =(比较运算),<=>,<,<=,>,>=,!=,<>,IN,IS NULL,LIKE,REGEXP |
10 | BETWEEN AND,CASE,WHEN,THEN,ELSE |
11 | NOT |
12 | &&,AND |
13 | XOR |
14 | ||,OR |
最低 | =(赋值运算),:= |