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;

posted @ 2020-04-13 17:59  _Jack_test  阅读(521)  评论(0编辑  收藏  举报