MySQL数据库常见的运算符总结~

        在MySQL数据库操作中,运算符”扮演“着较为重要的角色,连接表达式中的各个操作数,其作用是用来指明对操作数所进行的运算。下面是我在学习其过程中总结的一些关于MySQL各种运算符的特点以及使用方法。

1.运算符概述

8eba427ecbdb4ecb8a90a362478534c3.png

2.算术运算符

算术运算符是SQL中最基本的运算符,用于各类数值运算。

运算符作用
+加法
-减法
*乘法
除法,返回商
取余,返回余数

表1 MySQL中的算术运算符

例操作如下:

1.创建表1:

create table tmp1(num INT);

2.向字段num插入数据64:

INSERT INTO tmp1 value(64);

3.对num值进行加法和减法运算

mysql> SELECT num,num+10,num-3+5,num+5-3,num+36.5 FROM tmp1;
+------+--------+---------+---------+----------+
| num  | num+10 | num-3+5 | num+5-3 | num+36.5 |
+------+--------+---------+---------+----------+
|   64 |     74 |      66 |      66 |    100.5 |
+------+--------+---------+---------+----------+
1 row in set (0.00 sec)

4.对num值进行乘法和除法运算

mysql> SELECT num,num*2,num/2,num%3 FROM tmp1;
+------+-------+---------+-------+
| num  | num*2 | num/2   | num%3 |
+------+-------+---------+-------+
|   64 |   128 | 32.0000 |     1 |
+------+-------+---------+-------+
1 row in set (0.00 sec)

        当然在数学运算中,除数为0的除法是没有意义的,即除法运算中的除法不能为0,若被0除,则放回结果为NULL。

mysql> SELECT num,num/0,num%0 FROM tmp1;
+------+-------+-------+
| num  | num/0 | num%0 |
+------+-------+-------+
|   64 |  NULL |  NULL |
+------+-------+-------+
1 row in set (0.00 sec)

3.比较运算符

        一个比较运算符用于比较运算,其结果总是1、0或者是NULL。比较运算符常出现在SELECT语句中用来查询指定条件的记录。

符号描述
=等于
<>, !=不等于
>大于
<小于
<=小于等于
>=大于等于
BETWEEN AND在两值之间
IN在集合中
NOT IN不在集合中
<=>严格比较两个NULL值是否相等(安全等于)
LIKE模糊匹配
REGEXP 或 RLIKE正则式匹配
IS NULL为空
IS NOT NULL

不为空

LEAST在有多个参数时,返回最小值
GREATEST在有多个参数时,返回最大值

表2  MySQL中的比较运算符

 

下面通过例子展现不同比较运算符的使用方法

1.等于运算符(=)

        等号(=)用来判断数字、字符串和表达式是否相等:若相等则返回值为1,否则返回值为0。

mysql> SELECT 1=0,'2'=2,2=2,(1+2)=(0+3),NULL=NULL;
+-----+-------+-----+-------------+-----------+
| 1=0 | '2'=2 | 2=2 | (1+2)=(0+3) | NULL=NULL |
+-----+-------+-----+-------------+-----------+
|   0 |     1 |   1 |           1 |      NULL |
+-----+-------+-----+-------------+-----------+
1 row in set (0.00 sec)

数值比较时的规则:

(1)若有一个或两个参数为NULL,则比较运算的结果为NULL

(2)若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较

(3)若两个参数均为整数,则按整数进行比较

(4)若用字符串和数字进行相等判断,则MySQL可以自动将字符串转换为数字

2.安全等于运算符(<=>)

        操作与=运算符相同,但<=>可以用来判断NULL值。在两个操作数均为NULL时返回值为1;当一个操作数为NULL时返回值为0而不为NULL。

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

3.不等于运算符(<>或者!=)

        '<>'或者'!='用于判断数字、字符串、表达式不相等的判断:若不相等返回值为1,否则返回值为0.其不等用于判断空值NULL。

mysql> SELECT 'good'<>'god',1<>2,4!=4,5.5!=5,NULL<>NULL;
+---------------+------+------+--------+------------+
| 'good'<>'god' | 1<>2 | 4!=4 | 5.5!=5 | NULL<>NULL |
+---------------+------+------+--------+------------+
|             1 |    1 |    0 |      1 |       NULL |
+---------------+------+------+--------+------------+
1 row in set (0.00 sec)

4.小于等于运算符(<=)

        ‘<=’用来判断左边的操作数是否小于等于右边的操作数:若小于等于返回值为1否则返回0.‘<=’不能用于判断控制NULL。

mysql> SELECT 'good'<='god',1<=2,5.5<=5,NULL<=NULL;
+---------------+------+--------+------------+
| 'good'<='god' | 1<=2 | 5.5<=5 | NULL<=NULL |
+---------------+------+--------+------------+
|             0 |    1 |      0 |       NULL |
+---------------+------+--------+------------+
1 row in set (0.00 sec)

5.小于运算符(<)

        ‘<’用来判断左边的操作数是否小于右边的操作数:若小于返回值为1否则返回0.‘<’不能用于判断控制NULL

mysql> SELECT 'good'<'god',1<2,5.5<5,NULL<NULL;
+--------------+-----+-------+-----------+
| 'good'<'god' | 1<2 | 5.5<5 | NULL<NULL |
+--------------+-----+-------+-----------+
|            0 |   1 |     0 |      NULL |
+--------------+-----+-------+-----------+
1 row in set (0.00 sec)

 

6.大于等于运算符(>=)

7.大于运算符(>)

6,7两点操作与前面4,5反向相同,就不重复操作啦~

 

8.IS NULL(ISNULL)和IS NOT NULL运算符

        IS NULL和ISNULL检验一个值是否为NULL:若为NULL返回值为1,否则返回值为0。

        IS NOTNULL检验一个值是否为非NULL:若非NULL,返回值为1否则返回值为0

mysql> SELECT NULL IS NULL,ISNULL(NULL),ISNULL(10),10 IS NOT NULL;
+--------------+--------------+------------+----------------+
| NULL IS NULL | ISNULL(NULL) | ISNULL(10) | 10 IS NOT NULL |
+--------------+--------------+------------+----------------+
|            1 |            1 |          0 |              1 |
+--------------+--------------+------------+----------------+
1 row in set (0.00 sec)

9.BETWEEN AND运算符

        语法格式:expr BETWEEN min AND max.假如expr大于等于min且小于等于max,则BETWEEN的返回值为1,否则返回值为0.

mysql> SELECT 4 BETWEEN 2 AND 5,4 BETWEEN 4 AND 6,12 BETWEEN 9 AND 10;
+-------------------+-------------------+---------------------+
| 4 BETWEEN 2 AND 5 | 4 BETWEEN 4 AND 6 | 12 BETWEEN 9 AND 10 |
+-------------------+-------------------+---------------------+
|                 1 |                 1 |                   0 |
+-------------------+-------------------+---------------------+
1 row in set (0.00 sec)

mysql> SELECT 'x' BETWEEN 'f' AND 'g','b' BETWEEN 'a' AND 'c';
+-------------------------+-------------------------+
| 'x' BETWEEN 'f' AND 'g' | 'b' BETWEEN 'a' AND 'c' |
+-------------------------+-------------------------+
|                       0 |                       1 |
+-------------------------+-------------------------+
1 row in set (0.00 sec)

10.LEAST运算符

        语法格式:LEAST(值1,值2,...,值n)。其中,“值n”表示参数列表中有n个值。在有两个或多个参数的情况下,返回最小值。假如任意一个自变量为NULL,则LESAT()的返回值为NULL。

mysql> SELECT least(2,0),least(20.0,3.0,100.5),least('a','c','b'),least(10,NULL);
+------------+-----------------------+--------------------+----------------+
| least(2,0) | least(20.0,3.0,100.5) | least('a','c','b') | least(10,NULL) |
+------------+-----------------------+--------------------+----------------+
|          0 |                   3.0 | a                  |           NULL |
+------------+-----------------------+--------------------+----------------+
1 row in set (0.00 sec)

11.GREATEST(value1,value2,...)

        语法格式:GREATEST(值1,值2,...,值n)。其中,n表示参数列表中有n个值。当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()返回值为NULL。

mysql> SELECT greatest(2,0),greatest(20.0,3.0,100.5),greatest('a','c','b'),greatest(10,NULL);
+---------------+--------------------------+-----------------------+-------------------+
| greatest(2,0) | greatest(20.0,3.0,100.5) | greatest('a','c','b') | greatest(10,NULL) |
+---------------+--------------------------+-----------------------+-------------------+
|             2 |                    100.5 | c                     |              NULL |
+---------------+--------------------------+-----------------------+-------------------+
1 row in set (0.00 sec)

12.IN、NOT IN运算符

        IN运算符用来判段操作数是否为IN列表中的其中一个值:如果是,返回值为1否则返回值为0.

        NOT IN运算符用来判断表达式是否为IN列表中的其中一个值,如果不是则返回值为1,否则返回值为0

mysql> SELECT 2 IN(1,3,5,'thks'),'thks' IN (1,3,5,'thks');
+--------------------+--------------------------+
| 2 IN(1,3,5,'thks') | 'thks' IN (1,3,5,'thks') |
+--------------------+--------------------------+
|                  0 |                        1 |
+--------------------+--------------------------+
1 row in set, 2 warnings (0.00 sec)

mysql> SELECT 2 NOT IN(1,3,5,'thks'),'thks' NOT IN (1,3,5,'thks');
+------------------------+------------------------------+
| 2 NOT IN(1,3,5,'thks') | 'thks' NOT IN (1,3,5,'thks') |
+------------------------+------------------------------+
|                      1 |                            0 |
+------------------------+------------------------------+
1 row in set, 2 warnings (0.00 sec)

        在左侧表达式为NULL的情况下,或是表中找不到匹配项并且表中一个表达式为NULL去情况下,IN的返回值均为NULL。

13.LIKE

        LIKE运算符用来匹配字符串,语法格式为:expr LIKE匹配条件。如果expr满足匹配条件,则返回值为1(TRUE);如果不匹配,则返回值为0(FALSE)。expr或匹配条件中任何一个为NULL,则结果为NULL。

LIKE运算符在进行匹配时有两种通配符:

  • 百分比(%)通配符允许匹配任何字符串的零个或多个字符。
  • 下划线(_)通配符允许匹配任何单个字符。
mysql> SELECT 'stud' LIKE 'stud','stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE 't___','s' LIKE NULL;
+--------------------+--------------------+------------------+--------------------+---------------+
| 'stud' LIKE 'stud' | 'stud' LIKE 'stu_' | 'stud' LIKE '%d' | 'stud' LIKE 't___' | 's' LIKE NULL |
+--------------------+--------------------+------------------+--------------------+---------------+
|                  1 |                  1 |                1 |                  0 |          NULL |
+--------------------+--------------------+------------------+--------------------+---------------+
1 row in set (0.00 sec)

14.REGEXP

        REGEXP运算符用来匹配字符串。语法格式:expr REGEXP匹配条件。如果expr满足匹配条件,返回1;如果不满足,则返回0.若expr或匹配条件任意一个为NULL,则结果为NULL。

        REGEXP运算符在进行匹配时,通常有以下几种通配符:

模式描述
^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
.匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像 '[.\n]' 的模式。
[...]字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
mysql> SELECT 'ssky' REGEXP  '^s','ssky' REGEXP 'y$','ssky' REGEXP '.sky','ssky' REGEXP '[ab]';
+---------------------+--------------------+----------------------+----------------------+
| 'ssky' REGEXP  '^s' | 'ssky' REGEXP 'y$' | 'ssky' REGEXP '.sky' | 'ssky' REGEXP '[ab]' |
+---------------------+--------------------+----------------------+----------------------+
|                   1 |                  1 |                    1 |                    0 |
+---------------------+--------------------+----------------------+----------------------+
1 row in set (0.00 sec)

4.逻辑运算符

        在SQL中,所有逻辑运算符的求值所得结果均为TRUE,FALSE或NULL。在MySQL中,它体现为1(TRUE)、0(FASLE)和NULL。

运算符号作用
NOT 或 !逻辑非
AND逻辑与
OR逻辑或
XOR逻辑异或

表3  MySQL中的逻辑运算符

1.NOT 或者 !

        逻辑非运算符NOT或者!表示当操作数为0,所得值为1;当操作数为非零值时,所得值为0;当操作数为NULL时,所得值为NULL。

mysql> SELECT NOT 10, NOT(1-1),NOT -5,NOT NULL,NOT 1+1;
+--------+----------+--------+----------+---------+
| NOT 10 | NOT(1-1) | NOT -5 | NOT NULL | NOT 1+1 |
+--------+----------+--------+----------+---------+
|      0 |        1 |      0 |     NULL |       0 |
+--------+----------+--------+----------+---------+
1 row in set (0.00 sec)

mysql> SELECT !10,!(1-1),!-5,!NULL,!1+1;
+-----+--------+-----+-------+------+
| !10 | !(1-1) | !-5 | !NULL | !1+1 |
+-----+--------+-----+-------+------+
|   0 |      1 |   0 |  NULL |    1 |
+-----+--------+-----+-------+------+
1 row in set(0.00 sec)

        在使用运算符运算时,一定要注意不同运算符的优先级不同。如果不能确定计算顺序,最好使用括号,以保证运算结果的正确。

2.AND 或者 &&

        逻辑与运算符AND或者&&表示所有操作数均为非零值并且不为NULL时,计算所得结果为1;当一个或多个操作数为0时,所得结果为0;其余情况返回值为NULL。

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

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

        “AND”运算符可以有多个操作数,需要注意的是:多个操作数运算时,AND两边一定要使用空格隔开,不然会影响结果的正确性。

3.OR 或者 ||

        逻辑或运算符OR或者||表示两个操作数均为非NULL值且任意一个操作数为非零值时,结果为1,否则结果为0;当有一个操作数为NULL,且另一个操作数为非零值时,则结果为1,否则结果为NULL;当两个操作数均为NULL,则所得结果为NULL。

mysql> SELECT 1 OR -1 OR 0,1 OR 2,1 OR NULL,0 OR NULL,NULL OR NULL;
+--------------+--------+-----------+-----------+--------------+
| 1 OR -1 OR 0 | 1 OR 2 | 1 OR NULL | 0 OR NULL | NULL OR NULL |
+--------------+--------+-----------+-----------+--------------+
|            1 |      1 |         1 |      NULL |         NULL |
+--------------+--------+-----------+-----------+--------------+
1 row in set (0.00 sec)

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

4.XOR

         逻辑异或运算符XOR表示当任意一个操作数为NULL时,返回值为NULL;对于非NULL的操作数,若两个操作数都是非0值或者都是0值,则返回结果为0;若一个为0值、另一个为非0值,返回结果为1。

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

        a XOR b 的计算等同于(a AND (NOT b))或者((NOT a)AND b)。

5.位运算符

位运算符参与运算的操作数按二进制位进行运算,是二进制数上进行计算的运算符.位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数.

运算符号作用
&按位与
|按位或
^按位异或
~取反
<<左移
>>右移

表4  MySQL中的位运算符

1.位或运算符(|)

        位或运算的实质是将参与运算的几个数据按照对应的二进制数逐位进行逻辑或运算.对应的二进制位有一个或两个为1则该位的运算结果为1,否则为0.

mysql> SELECT 10 | 15,9 | 4 | 2;
+---------+-----------+
| 10 | 15 | 9 | 4 | 2 |
+---------+-----------+
|      15 |        15 |
+---------+-----------+
1 row in set (0.00 sec)

2.位与运算符(&)

        位与运算符的实质是将参加运算的几个操作数按照对应的二进制数逐位进行逻辑与运算.对应的二进制位都为1则该位的运算结果为1,否则为0.

mysql> SELECT 10&15,9&4&2;
+-------+-------+
| 10&15 | 9&4&2 |
+-------+-------+
|    10 |     0 |
+-------+-------+
1 row in set (0.00 sec)

3.位异或运算符(^)

        位异或运算的实质是将参与运算的两个数据按照对应的二进制数逐位进行逻辑异或运算.对应位的二进制数不同时,对应位的结果才为1.如果两个对应位数都为0或者都为1,则对应位的结果为0.

mysql> SELECT 10 ^ 15,1 ^ 0,1 ^ 1;
+---------+-------+-------+
| 10 ^ 15 | 1 ^ 0 | 1 ^ 1 |
+---------+-------+-------+
|       5 |     1 |     0 |
+---------+-------+-------+
1 row in set (0.00 sec)

4.位左移运算符(<<)

        位左移运算符<<使指定的二进制值的所有位都左移指定的位数.左移指定位数之后,左边高位的数值将被移出并丢弃,右边低位空出的位置用0补齐.

        语法格式:expr<<n.其中,n指定值expr要移位的位数.

mysql> SELECT 1<<2,4<<2;
+------+------+
| 1<<2 | 4<<2 |
+------+------+
|    4 |   16 |
+------+------+
1 row in set (0.00 sec)

5.位右移运算符(>>)

        位右移运算符>>使指定的二进制值的所有位都右移指定的位数.右移指定位数之后,右边低位的数值将被移除并丢弃,左边高位空出的位置用0补齐

        语法格式:expr>>n.其中,n指定值expr要移位的位数.

mysql> SELECT 1>>1,16>>2;
+------+-------+
| 1>>1 | 16>>2 |
+------+-------+
|    0 |     4 |
+------+-------+
1 row in set (0.00 sec)

6.位取反运算符(~)

        位取反运算的实质是将运算的数据按照对应的二进制数逐位反转,即1取反后变为0  0取反后变成1.

mysql> SELECT 5 & ~1;
+--------+
| 5 & ~1 |
+--------+
|      4 |
+--------+
1 row in set (0.00 sec)

//可以使用BIN()函数查看1取反后的结果,如下

mysql> SELECT BIN(~1);
+------------------------------------------------------------------+
| BIN(~1)                                                          |
+------------------------------------------------------------------+
| 1111111111111111111111111111111111111111111111111111111111111110 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)

6.运算符的优先级

f35404c77847b09ae56c23ced9f344c9.png

        以上是学习过程中自己的总结,如有不妥之处,还望指正。

 

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小新没有蜡笔️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值