超详细的MySQL入门教程(五)

MySQL和其它编程语言一样,也有自己用于数值操作的运算符(如大于、小于等)。本文介绍MySQL中常见的运算符。


基本知识

在MySQL中,主要有四种不同类别的运算符:算术运算符、比较运算符、逻辑运算符、位运算符。使用运算符的时候每一边至少需要有一个数值以进行数值操作,所以我们把运算符两边被操作的数值叫做操作数

在这里插入图片描述
MySQL中的每一种运算符都有其不同的职能:

  • 算术运算符:负责实现对两个操作数的加、减、乘、除、取余、取商操作。
  • 比较运算符:负责实现对两个操作数的数值大小、文本内容、是否空值等属性的互相比较。
  • 逻辑运算符:负责判断表达式的真( TRUE )假( FALSE )。
  • 位运算符:负责实现对二进制数值的运算先将十进制数转换为二进制数)。

下面依次介绍每种运算符和运算符的优先级。

算术运算符

算术运算符负责实现对两个操作数的加、减、乘、除、取余、取商操作。

MySQL中有如下算术运算符:

运算符 介绍
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
DIV 除法运算,返回商
MOD 取余运算

加法运算

在MySQL中,可以使用 +运算符进行两个以上数值的相加操作。例如:

/* 对多个数值进行加法运算 */
SELECT 1+7;		            # 8
SELECT 78+14;	            # 92
SELECT 95+120+114+156+48;	# 533

在这里插入图片描述

减法运算

在MySQL中,还可以使用 -运算符对两个以上的数值进行减法运算,例如:

/* 对多个数值进行减法运算 */
SELECT 89-52;			  # 37
SELECT 12-14-23;		  # -25
SELECT (-12)-(-95)-3-5;	  # 75

在这里插入图片描述

乘法运算

在MySQL中,可以使用 *运算符对多个数值进行乘法运算,例如:

/* 对多个数值进行乘法运算 */
SELECT 5*3;		   # 15
SELECT 2.4*1.58;   # 3.792
SELECT (-3)*2.56   # -7.68

在这里插入图片描述

除法运算

在MySQL中,可以使用 /运算符对多个数值进行除法运算,保留小数

/* 对多个数值进行除法运算 */
SELECT 3/5;			# 0.6000
SELECT 96/3/2;	    # 16.00000000
SELECT (-35)/5;	    # -7.00000

在这里插入图片描述

求商、求余运算

在MySQL中,可以使用DIV运算符进行求商运算使用MOD运算符进行求余运算

/* 对多个数值进行求商、求余运算 */
SELECT 5 DIV 3;			  # 1
SELECT 20 MOD 9;		  # 2
SELECT 36 DIV 5 MOD 2     # 1

在这里插入图片描述

比较运算符

在MySQL中,比较运算符负责实现对两个操作数的数值大小、文本内容、是否空值等属性互相比较,最常用的有><=!=等众多运算符。

下面列出MySQL中常用的比较运算符:

运算符 用途 描述
> 数值大小比较 是否大于
< 数值大小比较 是否小于
= 数值大小比较 是否等于
!= 数值大小比较 是否不等于
>= 数值大小比较 是否大于等于
<= 数值大小比较 是否小于等于
BETWEEN AND 数值大小比较 是否在两个数值之间
IS NULL 空值判断 字段是否为空
IS NOT NULL 空值判断 字段是否为空
IN 数组判断 字段值是否在数组中
NOT IN 数组判断 字段值是否在数组中
LIKE 文本模式(正则)匹配 字段值是否符合指定模式
NOT LIKE 文本模式(正则)匹配 字段值是否符合指定模式
REGEXP 文本模式(正则)匹配 字段值是否符合指定正则式

注:如果表达式为真,则返回1;否则返回0

在这里插入图片描述

数值大小比较

在MySQL中,最常用的比较运算符就是用于比较数值大小的各种“数学符号”。下面介绍用于数值大小比较的运算符的使用方法:

/* 比较运算符 - 数值大小比较 */
SELECT 5>3;						# 真
SELECT 12<6;					# 假
SELECT 1=1;		    			# 真
SELECT 8!=8;					# 假
SELECT 7<=1;					# 假
SELECT 8>=6;					# 真
SELECT 23 BETWEEN 10 AND 65;	# 真
# 将结果合并到一行
SELECT 5>3,12<6,1=1,8!=8,7<=1,8>=6,23 BETWEEN 10 AND 65;

在这里插入图片描述

空值判断

在MySQL中,还可以通过 IS NULL运算符来判断字段值是否为空值;如果要判断字段值是否不为空值,只需要使用 IS NOT NULL运算符即可。

下面演示使用该运算符查询出region_dirtbl表中regionDir字段为NULL的记录:

/* 比较运算符 - 空值判断 */
SELECT * FROM `region_dirtbl` WHERE regionDir IS NULL;			# 查询出表region_dirtbl中regionDir字段为空值的记录
SELECT * FROM `region_dirtbl` WHERE regionDir IS NOT NULL;		# 查询出表region_dirtbl中regionDir字段为非空值的记录

由于表中记录较多,查询非空值记录时加上了LIMIT子句,用于限制展示的行数为10行。

在这里插入图片描述

特别注意:不能使用=号来指定查找NULL值!(那样会查找字符串'NULL'

数组判断

在MySQL中,使用运算符IN可以判断字段值是否在用户指定的数组中,如果想查询字段值不在数组中的记录,只需要使用NOT IN运算符即可

下面用一个小例子介绍IN运算符的使用:

查询army_region表,查出一级地址为珉林、璃沙郊、碧水原的记录和相反条件的记录

根据题目要求,条件可以这样写:

  • WHERE region_L1 IN ('珉林','璃沙郊','碧水原');
  • WHERE region_L1 NOT IN ('珉林','璃沙郊','碧水原');
/* 比较运算符 - 数组判断 */
SELECT * FROM `army_region` WHERE region_L1 IN ('珉林','璃沙郊','碧水原');
SELECT * FROM `army_region` WHERE region_L1 NOT IN ('珉林','璃沙郊','碧水原');

第一小题结果:

在这里插入图片描述
第二小题结果:

在这里插入图片描述

文本模式(正则)匹配

在MySQL中,我们还可以使用LIKE运算符判断文本内容是否符合指定的模式REGEXP运算符判断文本是否匹配正则表达式。(即俗称的模糊匹配

注:使用LIKE运算符只能使用MySQL自带的两个通配符,而使用REGEXP运算符可以使用正则表达式

LIKE运算符使用的两个通配符:%_;其中%用于匹配0个或多个字符(即任意长度字符和空白),_用于匹配单个字符。例如:

  • A%:匹配用A开头的字符串。
  • __B%:匹配第三个字符为B的字符串。
  • %C%:匹配中间有C的字符串。
  • __D__%:匹配开头有五个字符,其中第三个字符为D的字符串。
  • __%E:匹配开头有两个字符,用E结尾的字符串。

有关正则表达式的内容,请参阅正则表达式教程 - 菜鸟教程,本文不予介绍。除了手动编写,您还可以使用在线生成工具生成正则表达式。

下面使用几个小例子来讲解MySQL的模糊匹配:

1.查询二级地址中有“南”字的记录

本题要求在army_region表中查询出千岩军驻扎地的二级地名中有“南”这个字的记录。因为条件并不复杂,所以选用LIKE运算符,其条件可以这样写:%南%

/* 模糊查询 - 在army_region表中查询二级地址有“南”字的记录 */
SELECT * FROM `army_region` WHERE region_L2 LIKE '%南%';

在这里插入图片描述
如图,我们已经成功查出region_L2字段中含有“南”字的记录。

2.查询二级地址以“谷”结尾的记录

本题要求查出千岩军驻扎地的二级地名中以“谷”字结尾的记录,条件可以这样写:%谷

/* 模糊查询 - 在army_region表中查询二级地址以“谷”字结尾的记录 */
SELECT * FROM `army_region` WHERE region_L2 LIKE '%谷';

在这里插入图片描述
如图,我们已经成功查出了region_L2字段中以“谷”字结尾的记录。

3.查询一级地址以“璃”字开头的记录

本题要求查询一级地址以“璃”字开头的记录,条件可以这样写:璃%

/* 模糊查询 - 在army_region表中查询一级地址以“璃”字开头的记录 */
SELECT * FROM `army_region` WHERE region_L1 LIKE '璃%';

在这里插入图片描述
如图,我们已经成功查出region_L1中以“璃”字开头的记录。

在实际生产环境中,我们可以按实际需求编写文本模式通配符或者正则表达式,来更好地完成工作。

逻辑运算符

在MySQL中,逻辑运算符用于判断表达式的真与假返回值为01NULL

MySQL有四种运算符:ANDORNOTXOR,它们的作用如下所示:

  • AND逻辑与:当所有表达式都为真时,才返回否则返回假。该运算符可以写作 &&
  • OR逻辑或:当所有参与判断的表达式中的一个及以上为真,就返回;如果所有表达式都为假,就返回假。该运算符可以写作 ||
  • NOT逻辑非:当所有表达式都为假,才返回真,否则返回假。该运算符可以写作 !
  • XOR逻辑异或:当两边的表达式真假属性相同时返回假,不同返回真;如果两边的表达式有一边真假属性为NULL时,返回NULL

注意:在MySQL中,0为假,1为真

逻辑与(AND或&&)

逻辑与:当所有表达式都为真时,才返回,否则返回

/* 逻辑与运算符 */
SELECT 0 AND 0;		 # 返回假
SELECT 1 AND 0;		 # 返回假
SELECT 1 AND 1;		 # 返回真

在这里插入图片描述

实际运用:查询army_info表中人数大于1000且查询权限大于等于3的千岩军支队信息。

本题条件可以这样写:numOfPol > 1000 AND queryPri >=3;

/* 逻辑运算符实战 - AND运算符 */
SELECT * FROM `army_info` WHERE numOfPol > 1000 AND queryPri >=3;

在这里插入图片描述

逻辑或(OR或||)

逻辑或:当所有参与判断的表达式中的一个及以上为真,就返回;如果所有表达式都为假,就返回

/* 逻辑或运算符 */
SELECT 0 OR 0;			# 返回假
SELECT 0 OR 1;			# 返回真
SELECT 1 OR 1;			# 返回真
SELECT 1 OR 0 OR 1;	    # 返回真

在这里插入图片描述

实际运用:查询army_info表中查询权限小于3或者建立日期在2018-01-17之前的千岩军支队信息。

本题条件可以这样写:queryPri < 3 OR Date(birthday) < '2018-01-17'

/* 逻辑运算符实战 - OR运算符 */
SELECT * FROM `army_info` WHERE queryPri < 3 OR Date(birthday) < '2018-01-17';

在这里插入图片描述

逻辑非(NOT或!)

逻辑非:当所有表达式都为假,才返回真,否则返回假

/* 逻辑非运算符 */
SELECT NOT 0;	# 返回真
SELECT NOT 1;   # 返回假

在这里插入图片描述

实际运用:在army_region表中查询出一级地区不在珉林、须弥、云来海三地且二级地址不为拒绝访问的记录。

本题条件可以这样写:region_L1 NOT IN('珉林','须弥','云来海') AND region_L2 != 'Permission Denied'
(由于本题要求查出一级地址不在珉林、须弥、云来海三地的记录,所以可以将其看作一个“黑名单”,使用IN运算符)

/* 逻辑运算符实战 - NOT运算符 */
SELECT * FROM `army_region` WHERE region_L1 NOT IN('珉林','须弥','云来海') AND region_L2 != 'Permission Denied';

在这里插入图片描述

逻辑异或(XOR)

逻辑异或:当两边的表达式真假属性相同时返回假,不同返回真;如果两边的表达式有一边真假属性为NULL时,返回NULL

用人话说就是:当表达式一个为真一个为假时,返回真,否则返回假

/* 逻辑异或运算符 */
SELECT 0 XOR 0;			 # 返回假
SELECT 0 XOR 1;			 # 返回真
SELECT 1 XOR 1;			 # 返回假
SELECT 0 XOR 0 XOR 0;	 # 返回假,因为0 XOR 0返回0,第二个表达式为0 XOR 0
SELECT 1 XOR 1 XOR 1;    # 返回真,因为1 XOR 1返回0,第二个表达式为0 XOR 1

在这里插入图片描述

下面用一个例子帮助大家理解XOR运算符追求的“异”:查询army_info表,两个条件如下:

  • 查询权限等级小于2queryPri < 2
  • 人数小于1000numOfPol < 1000

将两个查询条件使用XOR运算符连接起来,就是:

/* 逻辑运算符实战 - XOR运算符 */
SELECT * FROM `army_info` WHERE queryPri < 2 XOR numOfPol < 1000;

在这里插入图片描述

可以看出,当使用XOR运算符时,只有表中符合两个查询条件之一的记录才会被查询出来;符合全部条件全部条件都不符合的记录没有被查询出来。

注:XOR运算符在实际开发环境中不常用。

位运算符

位运算符是基于二进制数进行逻辑运算操作的运算符。位运算符先将操作数转换为二进制数,然后对二进制数进行逻辑运算后,将二进制结果转换为十进制数

在MySQL中,有以下六种位运算符:

运算符 名称 作用
& 按位与 将两个操作数的对应
二进制位
进行逻辑运算
| 按位或 将两个操作数的对应
二进制位
进行逻辑运算
^ 按位异或 将两个操作数的对应
二进制位
进行逻辑异或运算
~ 按位取反 一个目标操作数的
二进制位进行取反操作
<< 按位左移 第一个操作数的二进制
左移指定位数
>> 按位右移 第一个操作数的二进制
右移指定位数

按位与运算符

按位与运算符:将两个操作数的对应二进制位进行逻辑与运算。

对两个操作数使用按位与运算符(&)时,如果两个操作数二进制值的对应位都为1时该位结果返回1,否则该位结果返回0。原理图如下:
在这里插入图片描述
下面演示在MySQL中使用按位与运算符:

/* 按位与运算符 */
SELECT 5 & 9;		# 1
SELECT 3 & 2;		# 2
SELECT 7 & 3;		# 3
SELECT 12 & 6;      # 4

在这里插入图片描述

按位或运算符

按位或运算符:将两个操作数的对应二进制位进行逻辑或运算。

对两个操作数使用按位或运算符(|)时,如果两个操作数二进制值的对应位有一个或以上值为1,则该位结果返回1,否则该位结果返回0。原理图如下:
在这里插入图片描述
下面演示在MySQL中演示按位或运算符:

/* 按位或运算符 */
SELECT 5 | 9;		# 13
SELECT 3 | 2;		# 3
SELECT 7 | 3;		# 7
SELECT 12 | 6;		# 14

在这里插入图片描述

按位异或运算符

按位异或运算符:将两个操作数的对应二进制位进行逻辑异或运算

对两个操作数使用按位异或运算符(^)时,如果两个操作数二进制值的对应位数值相反,则该位结果返回1,否则该位结果返回0。原理图如下:
在这里插入图片描述
下面在MySQL中演示使用按位异或运算符:

/* 按位异或运算符 */
SELECT 5 ^ 9;		# 12
SELECT 3 ^ 2;		# 1
SELECT 7 ^ 3;		# 4
SELECT 12 ^ 6;		# 10

在这里插入图片描述

按位取反运算符

按位取反运算符:将一个目标操作数二进制位进行取反操作。

对目标操作数使用按位取反运算符(~)时,将该操作数的所有二进制数位进行取反(人话:0转1,1转0)。原理图如下:
在这里插入图片描述

下面演示在MySQL中使用按位取反运算符:

/* 按位取反运算符 */
SELECT ~ 5;		# 18446744073709551610
SELECT ~ 3;		# 18446744073709551612
SELECT ~ 7;		# 18446744073709551608
SELECT ~ 12;	# 18446744073709551603

在这里插入图片描述

按位左移、右移运算符

按位左移运算符:将第一个操作数的二进制值左移指定位数。同理,按位右移运算符的作用为将操作数的二进制值右移指定位数

原理图如下:
在这里插入图片描述
下面演示在MySQL中使用按位左移运算符(<<)和按位右移运算符(>>):

/* 按位左移、按位右移运算符 */
SELECT 5 << 3;		# 5左移3位,00000101 -> 00101000,结果40
SELECT 7 << 2;      # 7左移2位,00000111 -> 00011100,结果28
SELECT 12 >> 1;		# 12右移1位,00001100 -> 00000110,结果6
SELECT 19 >> 3;		# 19右移3位,00010011 -> 00000010,结果2

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qwe304/article/details/128379878
今日推荐