MySQL运算符
(1)算术运算符
在MySQL软件中,算术运算符包含加、减、乘、除;
(2)比较运算符
在MySQL软件中,比较运算符包含常用运算符如大于、小于、等于、不等于、小于大于等于、小于等于;实现特殊功能的比较运算符如between and、is null、in、like、regexp;
(3)逻辑运算符
在MySQL软件中,逻辑运算符包含与、或、非、异或;
(4)位运算符
在MySQL软件中,位运算符包含按位与、按位或、按位取反、按位异或、按位左移、按位右移;
1、算术运算符:
加法:a+b+c
减法:a-b-c
乘法:a*b*c
除法:a/b/c a div b div c
求余:a%b%c a mod b mod c
例1:
select 6+4 as 加法, -> 6-4 as 减法, -> 6*4 as 乘法, -> 6/4 as 除法, -> 6 div 4 as 除法div, -> 6%4 求余, -> 6 mod 4 as 求余mod;
注意:div做除时,整数划分,从除法结果中舍弃小数点右侧的小数部分;
例2:
select 6/0, -> 6 div 0, -> 6%0, -> 6 mod 0;
注意:当做除或求余时,如果除数为0,将是非法运算,返回结果为null;
例3:
当课程名称为管理学时,设置平均绩点分为分数除以2,要求显示学号,课程号,平均绩点分;
select studentno,courseno,score/2 -> from tb_score -> where courseno= -> (select courseno from tb_course where coursename='管理学');
2、比较运算符
大于:a>b
小于:a<b
等于:a=b a<=>b
不等于:a!=b a<>b
大于等于:a>=b
小于等于:a<=b
指定范围: str between a and b
判断为空:str is null
指定集合:str in(a,b,c)
通配符匹配:str like 表达式
正则表达式:str regexp 表达式
例1:比较数值、字符串、表达式;
select 1=1, -> 1<=>1, -> 'liu'='liu', -> 'liu'<=>'liu', -> 1+2=2+3, -> 1+2<=>2+3;
注意:1)=和<=>判断是否相等,相等则返回1,不相等则返回0;
例2:
select null=null, -> null<=>null;
注意:1)=不能操作null(空值),结果返回null;
2) <=>可以操作null,结果相等返回1;
3) !=和<>都不能操作null,结果返回null;
例2:
查询分数在80到90之间的学生的信息;
select * from tb_score -> where score>80 and score<90;
例3:
查询和数据库这门课程同一学期的课程的课程号、课程名称、学分;
select courseno,coursename,credit -> from tb_course -> where term= -> (select term from tb_course where coursename='数据库') and coursename!='数据库';
2.1、正则表达式:
正则表达式通常被用来检索或替换符合某个模式的文本内容,根据指定的匹配模式找文本中符合要求的特殊字符。在不使用数据库表的情况下,可以直接将正则表达式置于select关键字之后,进行简单的正则表达式测试,如果返回0,则表示没有匹配,返回1,则表示匹配成功;
<字符串>:匹配包含指定字符串的文本,如’会计’
[]:匹配[]中任何一个字符,如:’[ab]’
[^]:匹配不在[]中的任何一个字符,如:’[^ab]’
^:匹配文本的开始字符,如:’^b’
$:匹配文本的结尾字符,如’er$’
.:匹配任意单个字符,如:’b.t’
*:匹配0个或多个*前指定的字符,如’f*n’
+:匹配+前面的字符1次或多次,如’ba+’
{n}:字符串出现n次,如’b{2}’
(m,n):字符串出现至少m次,最多n次
例1:
查询班级名称中带有’会计’的班级信息;
select * from tb_class -> where classname regexp '会计';
例2:
查询班级名称中包含’会’’计’中任何一个字的班级信息;
例3:
查询课程名称中不含程序设计的课程信息;
select * from tb_course -> where coursename regexp '[^程序设计]';
例4:
查询课程名称中含有’管理’’信息’或’系统’中文字符的所有课程信息;
select * from tb_course -> where coursename regexp '管理|信息|系统';
例5:
查询班级名称以’会计’开头的班级信息;
select * from tb_class -> where classname regexp '^会计';
例6:
查询课程名称以’系统’结尾的课程信息;
select * from tb_course -> where coursename regexp '系统$';
3、逻辑运算符:
And(&&):与运算,如a and b,或a&&b
Or(||):或运算,如a or b,a||b
Not(!):非运算,如not a
XOR:异或,如a xor b
与运算:
例1:
select 3 and 4, -> 0 and 4, -> 0 and null, -> 3 and null, -> 3 && 4, -> 0 && 4, -> 0 && null, -> 3 && null;
注意:
1) 非0,没有null,结果返回1;
2) 非0,有null,结果返回null;
3) 任一操作数为0,结果返回0;
例2:
查询学分大于等于3且学时数大于32的课程名称、学分和学时数;
select coursename,credit,coursehour -> from tb_course -> where credit>=3 and coursehour>32;
或运算:
例3:
select 3 or 4, 0 or 4, 0 or 0, 0 or null, 3 or null, 3 || 4, 0 || 4, 0 || 0, 0 || null, 3 || null\G
注意:
1) 包含任一非0数据,结果返回1;
2) 包含0,null,结果返回null;
3) 所有操作数都为0,结果返回0;
例4:
查询籍贯是北京或上海的学生的姓名、籍贯和名族;
select studentname,native,nation -> from tb_student -> where native='北京' or native='上海';
例5:
查询籍贯是北京或湖南的少数名族男生的姓名、籍贯和名族;
select studentname,native,nation -> from tb_student -> where (native='北京' || native='湖南') && nation!='汉' && sex='男';
非运算:
例6:
select not 3, -> not 0, -> not null, -> !3, -> ! 0, -> ! null;
注意:
1) 操作数是非0数字,结果返回0;
2) 操作数为0,结果返回1;
3) 操作数为null(空值),结果返回null;
例7:
查询不是北京地区的学生信息;
select * from tb_student -> where native!='北京';
或:
select * from tb_student -> where not native='北京';
异或运算:
例8:
select 3 xor 4, -> 0 xor 0, -> null xor null, -> 0 xor 4, -> 0 xor null, -> 3 xor null;
注意:
1) 操作数包含null,结果返回null;
2) 操作数同为0或同为非0,结果返回0;
3) 操作数一个为0,一个非0,结果返回1;
4、位运算:
&:按位与,a & b
|:按位或,a | b
~:按位取反,~a
^:按位异或,a ^ b
<<:按位左移,a << b
>>:按位右移,a >> b
例1://按位与
select 5&6,bin(5&6),4&5&6,bin(4&5&6);
注意:
1) 按位与,首先由操作数由十进制转换成二进制数;
2) 然后按位进行与操作,1与1为1,其他为0;
3)最后将与后的结果转换成十进制数;
例2://按位或
select 5|6,bin(5|6),4|5|6,bin(4|5|6);
注意:
1) 按位或,1和任何数的或运算的结果是1;
2) 按位或,0和0的或运算的结果是0;
例3://按位取反
select ~4,bin(~4);
注意:
1) mysql中用8个字节(64位)表示,需要在100二进制数前面用0补足64位,再做取反操作;
2) 取反,1取反,结果为0;0取反,结果为1;
例4://按位异或
select 4^5,bin(4^5);
注意:
1) 相同的数异或后的结果为0;
2) 不同的数异或后的结果为1;
例5://按位左移,右移
select bin(5), -> 5<<4,bin(5<<4), -> 5>>1,bin(5>>1);
注意:
1) 按位左移,右边补0;
按位右移,左边补0;