七:MYSQL之常用操作符

前言:

  运算符连接表达式中各个操作数,其作用是用来指明对操作数所进行的运算。

  常见的运算有数学计算、比较运算、位运算及逻辑运算

一:算数运算符

  用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)

二:比较运算符

   2.1概述

    用于比较运算。包括大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、不等于(!=)、以及IN、BETWEEN AND、IS NULL、GREATEST、LEAST、LIKE、REGEXP等

    

  2.2各种比较运算符介绍  

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

      select 1=0,'2'=2,2=2,NULL=NULL;  返回值=0,1,1null

    2)安全等于号。这个操作符合=操作符执行相同的比较操作,不过<=>可以用来判断NULL值,在两个操作数均为NULL时,其返回值为1而不为NULL,而当一个操作数为NULL时,其返回值为0而不为NULL。

      select 1<=>0,'2'<=>2,NULL<=>NULL;   返回值=0,1,1

    3)‘<>’或者’!=’用于判断数字、字符串、表达式不相等的判断。如果不相等,返回值为1;否则返回值为0。这两个运算符不能用于判断空值NULL。

      select 'good'<>'good',1<>2,4!=5,5.5!=5,(1+3)!=(2+1),NULL<>NULL;  返回值=0,1,1,1,0null

    4IS NULL和ISNULL检验一个值是否为NULL,如果为NULL,返回值为1。否则返回值为0;IS NOT NULL检验一个值是否为非NULL,如果非NULL,返回值为1;否则返回值为0。

       select NULL IS NULL,ISNULL(NULL),ISNULL(10),10 IS NOT NULL;  返回值=11,0,1

    5BETWEEN AND运算符。语法格式为:expr BETWEEN min AND max。假如expr大于或等于min且小于或等于max,则BETWEEN的返回值为1,否则返回值为0。

      select 4 BETWEEN 4 AND 6,12 BETWEEN 9 AND 10;   返回值=1,0

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

      select least(2,0),least(20.0,3.0,100.5),least(10,NULL);  返回值=0,3.0null

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

      select greatest(2,0),greatest(20.0,3.0,100.5),greatest(10,NULL); 返回值=2,100.5null

    8INNOT IN运算符。IN运算符用来判断操作数是否为IN列表中的其中一个值,如果是,返回值为1;否则返回值为0。

      select 2 IN(1,3,5,'thks'),'thks' IN(1,3,5,'thks');  返回值=0,1

    9)LIKE运算符用来匹配字符串,语法格式为:expr LIKE 匹配条件,如果expr满足匹配条件,则返回值为1(TRUE);如果不匹配,则返回值为0(FALSE)。若expr或匹配条件中任何一个为NULL,则结果为NULL。 
      LIKE运算符在进行匹配时,可以使用下面两种通配符: 
      9.1) ‘%’,匹配任何数目的字符,甚至包括0字符。 
      9.2.)‘_’,只能匹配一个字符。

       select 'stud' LIKE 'stud','stud' LIKE 'stu_','stud' LIKE '%d','stud' LIKE't___','s' LIKE NULL;  返回值=1,1,1,1,0

    10)REGEXP运算符用来匹配字符串,语法格式为:expr REGEXP 匹配条件,如果expr满足匹配条件,返回1;如果不满足,则返回0;若expr或匹配条件任意一个为NULL,则结果为NULL。 
      REGEXP运算符在进行匹配时,常用的有下面几种通配符: 
      (1) ‘^’匹配以该字符后面的字符开头的字符串。 
      (2) ‘$’匹配以该字符后面的字符结尾的字符串。 
      (3) ‘.’匹配任何一个单字符。 
      (4) ‘[]’匹配在方括号内的任何字符。例如,”[abc]”匹配”a”、”b”或”c”。为了命名字符串的范围,使用一个’-‘。”[a-z]”匹配任何字母,而”[0-9]”匹配任何数字。 
      (5) ‘*’匹配0个或多个在它前面的字符。  

        select 'ssky' REGEXP '^s','ssky' REGEXP 'y$','ssky' REGEXP '.sky','ssky' REGEXP '[ab]';
介绍为转载内容

数据库建表脚本 

  2.3数据库表数据

 1 mysql> SELECT * FROM student;
 2 +------+----------+-------+----------+-----------------+
 3 | s_id | s_name   | s_age | s_gender | s_major         |
 4 +------+----------+-------+----------+-----------------+
 5 |    1 | 马化腾   |    54 || 腾讯集团CEO     |
 6 |    2 | 雷军     |    48 || 小米集团CEO     |
 7 |    3 | 丁磊     |    46 || 网易集团CEO     |
 8 |    4 | 马云     |    51 || 阿里巴巴集团CEO |
 9 |    5 | 刘强东   |    45 || 京东集团CEO     |
10 |    6 | 王健林   |    65 || 万达集团CEO     |
11 |    7 | 周鸿祎   |    46 || 360集团CEO      |
12 |    8 | 章泽天   |    25 || NULL            |
13 |    9 | 章子怡   |    39 || NULL            |
14 |   10 | 张一山   |    27 || 演员            |
15 |   11 | 冯小刚   |    66 || 导演            |
16 |   12 | 张艺谋   |    68 || 导演            |
17 |   13 | 刘亦菲   |    32 || 演员            |
18 |   14 | 莫言     |    70 || 作家            |
19 |   15 | 科比     |    35 || 篮球运动员      |
20 |   16 | 梅西     |    31 || 足球运动员      |
21 |   17 | 约翰塞纳 |    42 || 摔跤运动员      |
22 |   18 | 凤姐     |    36 || NULL            |
23 |   19 | 詹姆斯   |    31 || 篮球运动员      |
24 |   20 | 内马尔   |    25 || 足球运动员      |
25 |   21 | 胡歌     |    35 || 演员            |
26 |   22 | 许家印   |    67 || 恒大CEO         |
27 |   23 | 周杰伦   |    35 || 流行歌手        |
28 |   24 | 鹿晗     |    27 || 偶像明星        |
29 |   25 | P-Gone   |    20 || 说唱歌手        |
30 |   26 | 李安     |    55 || 导演            |
31 |   27 | 斯图尔特 |    28 || 演员            |
32 |   28 | 王大明   |    25 || NULL            |
33 |   29 | 犀利哥   |    45 || 乞丐            |
34 |   31 | 冯提莫   |    26 || 娱乐主播        |
35 |   32 | 卢本伟   |    25 || 网络主播        |
36 |   33 | 小狗     |    21 || LOL职业选手     |
37 |   34 | Gogoing  |    26 || LOL职业选手     |
38 |   35 | 仙凡     |    27 || LOL主播         |
39 |   36 | 黑人毅   |    29 || 户外主播        |
40 |   37 | 旭旭宝宝 |    28 || DNF主播         |
41 |   38 | 大龙猫   |    27 || DNF主播         |
42 |   39 | 奥巴马   |    57 || 前美国总统      |
43 |   40 | 克林顿   |    20 || 前美国总统      |
44 |   42 | 林俊杰   |    37 || 流行歌手        |
45 |   43 | 张韶涵   |    35 || 流行歌手        |
46 |   44 | 杨紫     |    27 || 演员            |
47 +------+----------+-------+----------+-----------------+
48 42 ROWS IN SET (0.00 sec)
数据库表数据

  2.4参考以下代码

--比较运算符,多个值进行比较,既可以作为结果输出,也可以作为判断条件

--<=>,安全等于号,可以用来判断某个数据是否为NULL,0表示buwei NULL,1表示NULL
SELECT s_major FROM student WHERE s_name='章泽天';--NULL
SELECT s_major <=> NULL FROM student s WHERE s.s_name='章泽天';---1
SELECT s_major <=> NULL FROM student WHERE s_name='马化腾';--0

--ISNULL() 、IS NULL 、IS NOT NULL 可以用来判断某个数据是否为NULL
SELECT ISNULL(s_major) FROM student WHERE s_name ='章泽天';--1
SELECT s_major IS NULL FROM student WHERE s_name='章泽天';--1
SELECT s_major IS NOT NULL FROM student WHERE s_name='章泽天';--0

--<>  、  !=  这两个运算符不能用于判断空值NULL
--用于判断数字、字符串、表达式不相等的判断,不相等返回1否则为0,不能安段NULL
SELECT s_major != '演员' FROM student WHERE s_name='章泽天';--NULL
SELECT s_major !='演员' FROM student WHERE s_name='马化腾';--1
SELECT s_major <> '演员' FROM student WHERE s_name='胡歌';--0
SELECT * FROM student WHERE s_major<>'演员';


--BETWEEN AND
--查询年龄在23-40之间的同学包含两端[23 40]
SELECT * FROM student WHERE s_age BETWEEN 23 AND 40;
SELECT s_age BETWEEN 25 AND 40 FROM student WHERE s_name='马化腾';--0
SELECT s_age BETWEEN 50 AND 60 FROM student WHERE s_name='马化腾';--1

--LEAST运算符,不好作为WHERE后的判断条件
SELECT LEAST(0,5,2),LEAST(10,25,8),LEAST(10,NULL,15);--0/8/NULL
--GREATEST运算符
SELECT GREATEST(0,5,2),GREATEST(10,25,8),GREATEST(10,NULL,15)--5/25/NULL

--IN   NOT IN查找符合给定值的记录,也可以作为判断某个值是否在给定值中
SELECT * FROM student WHERE s_age IN(25,35,45);
SELECT s_age IN(25,35,45) FROM student WHERE s_name='章泽天';--1
SELECT s_age IN(15,35,45) FROM student WHERE s_name='章泽天';--0

--LIKE运算符
SELECT * FROM student WHERE s_major LIKE '运动员';
SELECT * FROM student WHERE s_major LIKE '%运动员';
SELECT * FROM student WHERE s_major LIKE '%运动员%';
SELECT * FROM student WHERE s_major LIKE '_运动员';

--REGEXP ,(regular expression)匹配正则表达式
SELECT 'ssky' REGEXP '^s','ssky' REGEXP 'y$','ssky' REGEXP '.sky','sska' REGEXP '[fb]';
--结果 1,1,1,0
--如果expr满足匹配条件,返回1;如果不满足,则返回0;若expr或匹配条件任意一个为NULL,则结果为NULL。
--REGEXP运算符在进行匹配时,常用的有下面几种通配符:
--1‘^’匹配以该字符后面的字符开头的字符串。
--2‘$’匹配以该字符后面的字符结尾的字符串。
--3‘.’匹配任何一个单字符。
--4‘[…]’匹配在方括号内的任何字符。例如,”[abc]”匹配”a”、”b”或”c”。为了命名字符串的范围,使用一个’-‘。”[a-z]”匹配任何字母,而”[0-9]”匹配任何数字
--5‘*’匹配0个或多个在它前面的字符
比较运算符练习

 三:逻辑运算符

  3.1概述

    在SQL中,所有逻辑运算符的求值结果均为TRUE、FALSE、或NULL,在M有SQL中,他们体现为1/0、NULL

    

  3.2实例  

 1  1)NOT或!
 2 
 3       逻辑非运算符NOT或者!表示当操作数为0时,所得值为1;当操作数为非零值时,所得值为0,当操作数为NULL时,所得的返回值为NULL。
 4 
 5       select NOT 10,NOT(1-1),NOT -5,NOT NULL,NOT 1+1; 返回值= 01,0,0
 6 
 7     2)AND或&&
 8 
 9       逻辑与运算符AND或者&&表示当所有操作数均为非零值、并且不为NULL时,计算所得结果为1;当一个或多个操作数为0时,所得结果为0,其余情况返回值为NULL。
10 
11       select 1 AND -1,1 AND 0,1 AND NULL,0 AND NULL;
12 
13     3)OR或||
14 
15       逻辑与运算符OR或者||表示当两个操作数均为非NULL值,且任意一个操作数为非零值时,结果为1,否则结果为0;
16 
17       当有一个操作数为NULL,且另一个操作数为非零值时,则结果为1,否则结果为NULL;当两个操作数均为NULL时,则所得结果为NULL。    
18 
19       select 1 OR-1,1 OR 0,1 OR NULL,0 OR NULL;      
20 
21     4)XOR
22 
23       逻辑异或运算符XOR。当任意一个操作数为NULL时,返回值为NULL;对于非NULL的操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0;如果一个为0值,另一个为非0值,返回结果为1。
24 
25         select 1 XOR 1,0 XOR 0,1 XOR 0,0 XOR 0,1 XOR NULL,1 XOR 1;
实例介绍为转载

  3.3:数据库表数据

数据库表数据

   3.4:练习代码

四:位运算符

  4.1:概述

    位运算符用来 对二进制字节中的位进行测试,位移或者测试处理,M有SQL中提供的位运算符有按位或(|),按位与(&),按位异或(^),按位右移(>>)按位左移(<<),按位取反(~)

  4.2:实例

 1 1)位或运算符 |
 2 
 3       位或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑或运算。对应的二进制有一个或两个为1则该位的运算结果为1,否则为0。
 4 
 5       select 10|15,9|4|2;     返回值=15,15
 6 
 7       分析:10的二进制数值为1010,15的二进制数值为1111,按位或运算之后,结果为1111,即整数15;9的二进制位1001,4的二进制为0010,按位或运算之后,结果为1111,即整数15。其结果为一个64位无符号整数
 8 
 9     2)位与运算符 &
10 
11       位与运算的实质是将参与运算的两个操作数,按对应的二进制数逐位进行逻辑与运算。对应的二进制都为1,则该位的运算结果为1,否则为0。
12 
13       select 10&15,9&4&2;  返回值=10,9
14 
15       分析:10的二进制位1010,15的二进制位1111,按位与运算结果为1010,即整数10;9的二进制为1001,4的二进制位0100,2的二进制为0010,按位与运算之后,结果为0000,即整数0,。其结果为一个64位无符号整数。
16 
17     3)位异或运算 ^
18 
19       位异或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑异或运算。对应的二进制数不同时,对应的结果才为1。如果两个对应位数都为0或者都为1,则对应位的结果为0。
20 
21       select 10^15,1^0,1^1;  返回值=510
22 
23     4)位左移运算符 <<
24 
25       位左移运算符<<使指定的二进制值的所有位都左移指定的位数。左移指定位数之后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。语法格式为:expr<
26 
27       select 1<<2,4<<2;  返回值=416
28 
29       分析:1的二进制位0000 0001,左移两位之后0000 0100,即十进制整数4;十进制4左移两位之后变成0001 0000,即变成十进制的16。
30 
31     5)位右移运算符 >>
32 
33       位右移运算符>>使指定的二进制的所有位都右移指定的位数。右移指定位数之后,右边低位的数值将被丢弃移除,左边高位空出的位置用0补齐。语法格式为:expr>>n。这里n指定值expr要移除的位数。
34 
35       select 1>>1,16>>2;  返回值=016
36 
37       分析:1的二进制位0000 0001右移1位之后变成0000 0000,即十进制整数0,16的二进制数值为0001 0000右移两位之后变成十进制的4.
38 
39     6)位取反运算 ~
40 
41       位取反运算的实质是将参与运算的数据,按对应的二进制数逐位反转,即1取反后变成0,0取反变成1。
42 
43       select 5&~1;  返回值=4
位运算符介绍,转载

五:运算符优先级

  

猜你喜欢

转载自www.cnblogs.com/wdmlsx/p/9266214.html