+++++++++++++++++++++++++++++++++++++++++++
标题:MySQL的常见运算符
时间:2019年2月23日
内容:MySQL的常见运算符
重点:主要讲述MySQL常见运算以及相关小实验,最后讲述运算符的优先级。
+++++++++++++++++++++++++++++++++++++++++++
1. 运算符概述
通过运用运算符从而通过更加灵活的方式使用表中的数据。MySQL的内部运算符极其丰富,主要分为四类:算数运算符、比较运算符、逻辑运算符和位移运算符。
1.1 算数运算符
算数运算符用于各类数值运算,其中包括加、减、乘、除和模五中运算。
1.2 比较运算符
比较运算符用于比较运算,其中包括大于、小于、等于、大于等于、小于等于和不等于六种运算,除此之外还包括in、between and、is null、greatest、least、like和regexp等。
1.3 逻辑运算符
逻辑运算符最终结果为TRUE或FALSE。该类运算符包括逻辑非、逻辑与、逻辑或和逻辑异或。
1.4 位运算符
位移运算符与预算操作数按照二进制位进行移位运算。其中包括位&、位或、位非(~)、位异或(^)、左移(<<)和右移(>>)六种。
2. 算数运算符
2.1 运算符的作用
2.2 运算应用举例
mysql> create table num (
-> list_id int unsigned not null ,
-> num int not null ,
-> primary key(list_id) );
mysql> insert into num values(1,11),(2,22),(3,33);
mysql> select num+10 , num+20 , num+30 from num;
3. 比较运算符
3.1 运算符的作用
3.2 运算应用举例
3.2.1 等值运算
mysql> select 1=0 , '1'=1 , 2=2 , 'b'='b' , (1+3)=(2+2) , null=null ;
3.2.2 安全等值运算
操作数均为NULL时返回值为1,一方操作数为NULL时返回值为0。
mysql> select 1<=>0 , '1'<=>1 , 2<=>2 , 'b'<=>'b' , null<=>1 , null<=>null ;
3.2.3 运算符(!=、<、>、<=和>=)
mysql> select 1!=2 , '111'>2 , 10>=5 , 20<=9 , 5<null;
3.2.4 is [not] null运算
mysql> create table num1 ( list_id int unsigned , num int );
mysql> insert into num1 values(1,1);
mysql> insert into num1 values(1,null);
mysql> insert into num1 values(null,null);
mysql> insert into num1 values(null,1);
3.2.5 between...and运算
mysql> create table num2 (id int primary key , stu_id int);
mysql> insert into num2 values(1,222);
mysql> insert into num2 values(2,333);
mysql> insert into num2 values(3,444);
mysql> insert into num2 values(4,555);
mysql> insert into num2 values(5,666);
3.2.6 LEAST运算符
语法格式为least(m1,m2...mn)。数值运算返回最小值;字符串运算,返回字母表中的顺序靠前的字母;如果存在null,则返回null。
mysql> select least(1,2,3) , least(null,4,5) , least('asd','zxc','qwe') ;
3.2.7 greatest运算符
语法格式为greatest(m1,m2...mn)。数值运算返回最大值;字符串运算,返回字母表中的顺序靠后的字母;如果存在null,则返回null。
mysql> select greatest(1,2,3) , greatest('qwe','asd','zxc') , greatest('qqq' , null , 1);
3.2.8 [not] in运算符
in运算用于判断操作数是否存在于数据列表中的其中一个值,是则返回1,否则返回0;而not in与in的作用恰恰相反。
mysql> create table num4 (id int primary key , stu_id int);
mysql> insert into num4 values(1,1111);
mysql> insert into num4 values(2,2222);
mysql> insert into num4 values(3,3333);
mysql> insert into num4 values(4,4444);
mysql> insert into num4 values(5,5555);
mysql> select * from num4 where stu_id in (1111,2222,6666);
mysql> select * from num4 where stu_id not in (1111,2222,6666);
3.2.9 like运算符
like运算符是用于匹配字符串的,语法格式为"字段 like 匹配表达式"。匹配成功返回TRUE,否则返回FALSE。
like的两种通配符:
%表示匹配任意0~n多个字符。
_表示匹配任意1个字符。
mysql> insert into list values(1,'qwe','qwe');
mysql> insert into list values(2,'asd','asd');
mysql> insert into list values(3,'zxc','zxc');
mysql> insert into list values(4,'zxcs','zxcs');
mysql> select * from list where username like 'zx_';
mysql> select * from list where username like 'zx%';
3.2.10 regexp运算符(正则表达式匹配)
语法格式为"字段 regexp 匹配表达式"。
满足条件返回值为1;否则返回值为0;如果字段或匹配条件任意一个为null,则返回结果为null。
regexp通配符:
(1) '^' 匹配以指定的字符串开头的字符串。
(2) '$' 匹配以指定的字符串结尾的字符串。
(3) '.' 匹配任意一个单个字符。
(4) '[...]' 匹配在方括号中的任意字符。([asd]、[a-z]、[0-9])
(5) '*' 匹配0或多个在其前面的字符。('x*'、'[0-9]*')
mysql> insert into list1 values(1,'qwer','asdff');
mysql> insert into list1 values(2,'xfvdb','zdnei');
mysql> insert into list1 values(3,'kjegv','afwvub');
mysql> insert into list1 values(4,'mmmmmm','ppppp');
mysql> select * from list1 where username regexp '^k[abcdefj]';
mysql> select * from list1 where username regexp '.m*m$';
4. 逻辑运算符
4.1 逻辑运算符的作用
逻辑运算符求职所得结果均为TRUE、FALSE或NULL。在MySQL中体现为1、0或null。
4.2 逻辑运算符详解
4.2.1 NOT 或 !
操作数为null:取反后返回值为null;
操作数为非null:0的返回值为1,1的返回值为0。
4.2.2 AND 或 &&
操作数存在null:
操作数均为null时,返回值为null;
操作数存在其中一个为null时,与1运算结果为null,与0运算结果为0。
操作数均为非null:1与1运算为真,其他均为假。
4.2.3 OR 或 ||
操作数存在null:
操作数均为null时,返回值为null;
操作数其中一个为null时,与1运算时值为1,与0运算时值为0;
操作数均为非null:1与1运算时值为1,其他情况均为假。
4.2.4 XOR(异或)
操作数存在null时:运算结果均为null;
操作数为非null时:操作数相同时返回值为0,操作数相异时返回值为1。
5. 位运算符
5.1 位运算符的作用
5.2 位运算符详解
5.2.1 位或运算符
5.2.2 位与运算符
5.2.3 位异或运算符
5.2.4 左(右)移位运算符
6. 运算符的优先级(重点掌握)
运算符由上到下优先级依次由低到高。