深入浅出mysql-mysql中的运算符

4. mysql中的预算符


4.1 算术运算符


+  加法
-  减法
*  乘法
/,DIV  除法,返回商
%,MOD  除法,返回余数


范例


下例中简单地描述了这几种运算符的使用方法:
mysql> select 0.1+ 0.3333 ,0.1-0.3333, 0.1*0.3333, 1/2,1%2;
+-------------+------------+------------+--------+------+
| 0.1+ 0.3333 | 0.1-0.3333 | 0.1*0.3333 | 1/2 | 1%2 |
+-------------+------------+------------+--------+------+
| 0.4333 | -0.2333 | 0.03333 | 0.5000 | 1 |
+-------------+------------+------------+--------+------+
1 row in set (0.00 sec)


4.2 比较运算符


= 等于
<> 或 != 不等于
<=> NULL的安全等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 存在于指定范围内
IN 存在于指定集合
IS NULL 为NULL
IS NOT NULL 不为NULL
LIKE 通配符匹配
REGEXP 或者 RLIKE 正则表达式匹配


“=”运算符


是什么


用于比较运算符两侧的操作数是否相等,如果两侧操作数相等返回值为 1,否则为 0


范例


mysql> select 1=0,1=1,NULL=NULL;
+-----+-----+-----------+
| 1=0 | 1=1 | NULL=NULL |
+-----+-----+-----------+
| 0 | 1 | NULL |
+-----+-----+-----------+
1 row in set (0.00 sec)


“<>”运算符


是什么


和“=”相反,如果两侧操作数不等,则值为 1,否则为 0。


“<=>”安全的等于运算符


是什么


安全的等于运算符,和“=”类似,在操作数相等时值为 1,不同之处在于即使操作的值为 NULL 也可以正确比较。


“<”运算符


是什么


当左侧操作数小于右侧操作数时,其返回值为 1,否则其值为 0。


“<=”运算符


是什么


当左侧操作数小于等于右侧操作数时,其返回值为 1,否则返回值为 0。


“>”运算符


是什么


,当左侧操作数大于右侧操作数时,其返回值为 1,否则返回值为 0。


.....


BETWEEN


是什么


使用格式为“a BETWEEN min AND max”,当 a 大于等于 min 并且小于等于 max,则返回值为 1,否则返回 0


范例


mysql> select 10 between 10 and 20, 9 between 10 and 20;
+----------------------+---------------------+
| 10 between 10 and 20 | 9 between 10 and 20 |
+----------------------+---------------------+
| 1 | 0 |
+----------------------+---------------------+
1 row in set (0.00 sec)


IN


是什么


使用格式: a IN (value1, value2),当 a 的值存在于列表中时,则整个比较表达式返回的值为 1,否则返回 0。


范例


mysql> select 1 in (1,2,3) , 't' in ('t','a','b','l','e'),0 in (1,2);
+--------------+------------------------------+------------+
| 1 in (1,2,3) | 't' in ('t','a','b','l','e') | 0 in (1,2) |
+--------------+------------------------------+------------+
| 1 | 1 | 0 |
+--------------+------------------------------+------------+
1 row in set (0.00 sec)


IS NULL


是什么


使用格式为“a IS NULL”,当 a 的值为 NULL,则返回值为 1,否则返回 0。


范例


mysql> select 0 is null, null is null;
+-----------+--------------+
| 0 is null | null is null |
+-----------+--------------+
| 0 | 1 |
+-----------+--------------+
1 row in set (0.02 sec)


IS NOT NULL


是什么


运算符的使用格式为“a IS NOT NULL”。和“IS NULL”相反,当 a 的值不为 NULL,则返回值为 1,否则返回 0。


范例


mysql> select 0 is not null, null is not null;
+----------------+-------------------+
| 0 is not null | null is not null |
+----------------+-------------------+
| 1 | 0 |
+----------------+-------------------+
1 row in set (0.00 sec)


LIKE


是什么


运算符的使用格式为“a LIKE %123%”,当 a 中含有字符串“123”时,则返回值为 1,否则返回 0。


范例


mysql> select 123456 like '123%',123456 like '%123%',123456 like '%321%';
+--------------------+---------------------+---------------------+
| 123456 like '123%' | 123456 like '%123%' | 123456 like '%321%' |
+--------------------+---------------------+---------------------+
| 1 | 1 | 0 |
+--------------------+---------------------+---------------------+
1 row in set (0.00 sec)


REGEXP /RLIKE


是什么


运算符的使用格式为“str REGEXP str_pat”,当 str 字符串中含有 str_pat相匹配的字符串时,则返回值为 1,否则返回 0


范例


mysql> select 'abcdef' regexp 'ab' ,'abcdefg' regexp 'k';
+----------------------+----------------------+
| 'abcdef' regexp 'ab' | 'abcdefg' regexp 'k' |
+----------------------+----------------------+
| 1 | 0 |
+----------------------+----------------------+
1 row in set (0.00 sec)


4.3 逻辑运算符


NO或“!”表示逻辑非


是什么


当操作数为 0(假),则返回值为 1,否则值为 0。但是有一点除外,那就是 NOT NULL 的返回值为 NULL,


范例


mysql> select not 0, not 1, not null ;
+-------+-------+----------+
| not 0 | not 1 | not null |
+-------+-------+----------+
| 1 | 0 | NULL |
+-------+-------+----------+
1 row in set (0.00 sec)


AND”或“&&”表示逻辑与运算


是什么


当所有操作数均为非零值并且不为 NULL 时,计算所得结果为 1,当一个或多个操作数为 0 时,所得结果为 0,操作数中有任何一个为NULL 则返回值为 NULL


范例


mysql> select (1 and 1),(0 and 1) ,(3 and 1 ) ,(1 and null);
+-----------+-----------+------------+--------------+
| (1 and 1) | (0 and 1) | (3 and 1 ) | (1 and null) |
+-----------+-----------+------------+--------------+
| 1 | 0 | 1 | NULL |
+-----------+-----------+------------+--------------+
1 row in set (0.00 sec)


OR”或“||”表示逻辑或运算。


是什么


当两个操作数均为非 NULL 值时,如有任意一个操作数为非零值,则结果为 1,否则结果为 0。当有一个操作数为 NULL 时,如另一个操作数为非零值,则结果为 1,否则结果为 NULL


范例


mysql> select (1 or 0) ,(0 or 0),(1 or null) ,(1 or 1),(null or null);
+----------+----------+-------------+----------+----------------+
| (1 or 0) | (0 or 0) | (1 or null) | (1 or 1) | (null or null) |
+----------+----------+-------------+----------+----------------+
| 1 | 0 | 1 | 1 | NULL |
+----------+----------+-------------+----------+----------------+
1 row in set (0.00 sec) 


XOR表示逻辑异或


是什么


当任意一个操作数为 NULL 时,返回值为 NULL。对于非 NULL 的操作数,如果两个的逻辑真假值相异,则返回结果 1;否则返回 0。


范例


mysql> select 1 xor 1 ,0 xor 0,1 xor 0,0 xor 1,null xor 1;
+---------+---------+---------+---------+------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | 0 xor 1 | null xor 1 |
+---------+---------+---------+---------+------------+
| 0 | 0 | 1 | 1 | NULL |
+---------+---------+---------+---------+------------+
1 row in set (0.00 sec)


4.4 位运算符


&  位与(位 AND)


是什么


对多个操作数的二进制位作逻辑与操作,


范例


mysql> select 2&3&4;
+-------+
| 2&3&4 |
+-------+
| 0 |
+-------+
1  row in set (0.00 sec)


| 位或操作


是什么


多个操作数的二进制位作逻辑或操作


范例


mysql> select 2|3;
+-----+
| 2|3 |
+-----+
| 3 |
+-----+
1 row in set (0.00 sec)


^ 位抑或


是什么


对操作数的二进制位做异或操作


范例


mysql> select 2^3;
+-----+
| 2^3 |
+-----+
| 1 |
+-----+
1 row in set (0.00 sec)


~ 位取反


是什么


对操作数的二进制位作 NOT 操作


范例


mysql> select ~1 ,~ 18446744073709551614;
+----------------------+------------------------+
| ~1 | ~ 18446744073709551614 |
+----------------------+------------------------+
| 18446744073709551614 | 1 |
+----------------------+------------------------+
1 row in set (0.00 sec)


常量数字默认会以 8 个字节来表示,8 个字节就是 64 位,常量 1 的二进制表示为 63 个“0”加1个“1”,位取反后就是63个“1”加一个“0”,转换为二进制后就是18446744073709551614,


>> 位右移


是什么


左操作数向右移动右操作数指定的位数


范例


mysql> select 100>>3;
+--------+
| 100>>3 |
+--------+
| 12 |
+--------+
1 row in set (0.00 sec)
就是对 100 的二进制数 0001100100 右移 3 位,左边补 0,结果是 0000001100,转换为二进制数是 12,


<< 位左移


是什么


左操作数向左移动右操作数指定的位数


范例


mysql> select 100<<3;
+--------+
| 100<<3 |
+--------+
| 800 |
+--------+
1 row in set (0.00 sec)
对 100 的二进制数 0001100100 左移 3 位,右边补 0,结果是 1100100000,转换为二进制数是 800


运算符的优先级


1  :=
2  ||, OR, XOR
3  &&, AND
4  NOT
5  BETWEEN, CASE, WHEN, THEN, ELSE
6  =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
7  |
8  &
9  <<, >>
10  -, +
11  *, /, DIV, %, MOD
12  ^
13  - (一元减号), ~ (一元比特反转)
14  !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值