当前位置: 首页 > article >正文

MySQL:常见运算符

前言:

五一过后,我又来啦!狂玩五天,放松好心情~

MySQL中的运算符有以下4类,分别是:算数运算符,比较运算符,逻辑运算符,位操作运算符。

算数运算符:

有一定python基础的话,应该对”算数运算符“并不陌生,包括:+ - * / %。加减乘除取余数。

我们可以选择表内某一数据进行加法运算,并输出运算结果。

这里我们先创建一个新的表,tb5,字段名为 num,字段属性为INT。

向表内添加数值 55:

我们得到的表是这样的:

 对该值进行加法运算,并输出:

发现,输出的结果也形成了一个表。那么我们看看原数据是否会有变化:

并不会。

# 其实做到这里,我有一个疑问,是否可以通过运算符改变原表的数值呢?SELECT * FROM <TABLE> 语句相当于把表内的值拷贝一个出来,进行数值运算。

# 具体更改原表数值中的内容需要等到学习UPDATE语句。这里的运算并不能改变原表中的值。

其他的运算也是如此。

# 0除任何数都为NULL

比较运算符:

比较运算符的结果:1,0,NULL

往往用于SELECT 查询条件中。

 

  • 字符串和数字进行比较,会先将字符串转化为数字
  • 如果一个(或一个以上的)参数为NULL,那么所得结果为NULL
  • 如果两个比较类型是字符串,按照字符串类型进行对比
  • 大于等于,小于等于,不等于,这些就不再一一进行比较了
  • 接下来注意一下安全等于运算符(<=>)

 除了判断NULL的地方不一样之外,和=的作用相同。

检验是否为NULL 的语句:

IS NULL == ISNULL 为NULL

IS NOT NULL  不为NULL

注意,使用ISNULL 的时候,判断的值要放在后面的括号里。

BETWEEN <> AND <>:

判断值是否在区间内。(字符串也是可以实现的)

LEAST <(数值)> :

筛选输入数据中的最小值。

浮点数也是可以的,看一下字符串:

在既有数字,又有字符串的情况下,优先数字大小。

既然有挑选最小值的语句,那么也一定有挑选最大值的语句。

GREATEST<>;

挑选所给数据中最大的一项。

 <> LIKE <>;

  • 用来匹配字符串
  • 有两个通配符,% 和 _ ,%代表任意个数字符;_ 代表一个任意字符
  • %可以匹配NULL

# %d 表示的就是以d结尾的任意单词。

<> REGEXP <>:

 使用正则表达式中的符号来匹配字符串。

这个需要一定正则表达式基础,这里贴一个大佬的文章:

(1条消息) 正则表达式(一)字符串匹配_正则表达式匹配指定字符串_花果山来的和尚的博客-CSDN博客

匹配以g开头的单词

 匹配在方括号中出现的任意字符,可以重复匹配

(如果没有*号在方括号后面,那么在正则表达式中,方括号只能匹配一次)

逻辑运算符:

逻辑运算符包括:非,与,或,异或

注意,下面的例子中使用了两个数进行比较,实际上可以有多个数进行逻辑运算,数字中间使用逻辑运算符相连接。

非:NOT 或 !

表示:后面跟着的数字是0,返回1;不是0,也不是NULL,返回1;是NULL 返回 NULL。

 

这样一看两个似乎相同,但是依然有例外情况:

 

 

 

 出现这个情况是因为 NOT 和 !的运算优先级不同。

  • NOT 的优先级低于 + 和 -,因此先进行算数运算,再进行逻辑运算。
  • !的优先级高于 + 和 -,因此先进行逻辑运算,在进行算数运算。
  • 可以利用圆括号改变运算顺序。

AND 或 &&:

<> AND <>  //  <> && <>

  • 前后操作数均为非零,且不为NULL,所得结果为1;
  • 有一个(或一个以上)数为0,结果为0;
  • 非0数和NULL,结果为NULL;
  • 0和NULL,结果为0;

 

OR 或 ||:

<> OR <>  //  <> || <>

  • 两个操作数均为 NULL,返回NULL
  • 一个数为0,一个为NULL,返回NULL
  • 一个数非零,一个为NULL,返回非零数
  • 两个数均为非零,返回1
  • 两个数均为0,返回0
  • 一个数非零,一个数为0,返回1

 

 

XOR

<> XOR <>

  • 只要有一个操作数为NULL,返回NULL
  • 都是非零值,或都是0,返回0
  • 有一个是非零,一个是0,返回1

 

位运算符:

对二进制字节中的位进行测试、移动、或者测试处理,MySQL中提供的位运算符有:

  • 按位或(|)
  • 按位与(&)
  • 按位异或(^)
  • 按位左移(<<)
  • 按位右移(>>)
  • 按位取反(~)

按位或(|):

这个需要理解前面在“逻辑运算符”中提到的 OR 或 ||,

将参与运算的数据,按照其对应的二进制数,逐位进行“逻辑或运算”:

先来举个例子:

 我们进行了两个“按位或”运算,先来看10 | 15

  • 10的二进制为:1010
  • 15的二进制为:1111
  • 牢记逻辑或运算的内容:两个数均为非零,一个数为0一个数为非零,返回1;两个数为0,返回0

再来看4,9,2:

  • 4:0100
  • 9:1001
  • 2:0010
  • 三个数,只有全为0的时候才能返回0

结果按位或的结果是,返回一个64位无符号整数

按位与(&)

这回参照的是“逻辑与运算”:

  • 均为非零,非NULL,返回1
  • 有一个为0,返回0 

位异或(^)

参照“逻辑异或运算”: 

 

  • 都是非零,或都是0,即全都是相同类型,返回0
  • 不同类型,返回1

位左移(<<)

expr << n,n为移动位数

15:0000 1111

60:0011 1100

右侧用0补齐

位右移(>>)

和位左移一样。

 

 

位取反(~)

0 变成1, 1变成0

如果单独取反,会发现数据特别大:

 

可以合并其他运算:

 

运算符优先级:

由低到高,转换过来就是先算哪个:

  • 赋值运算=,:=
  • ||   OR
  • XOR
  • &&   AND
  • NOT
  • BETWEEN,  CASE,  WHEN,  THEN,  ELSE
  • 比较运算=,  <=>,  >=,  >,  <,  <>,  !=,   IS, LIKE,  REGEXP,  IN
  • |
  • &
  • <<,  >>
  • -, +
  • *,   /(DIV),  %(MOD)
  • ^
  • 负号-,   位反转~

 


http://www.kler.cn/a/17715.html

相关文章:

  • Centos安装Elasticsearch教程
  • 开发语言中,堆区和栈区的区别
  • Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied
  • Python中异常处理小测验
  • 远离生成式AI大乱斗,SAS公司揭示亚太区千亿AI市场蓝图
  • 【Golang】Channel的ring buffer实现
  • FLstudio21支持中文语言及水果最新版本功能特点
  • C++之C++新特性
  • 借助PLC-Recorder,西门子PLC S7-200SMART实现2ms周期采集的方法(带时间戳采集)
  • C plus plus ——【继承与派生】
  • TouchGFX开发(2)----触摸屏幕组件点亮LED
  • 【Android入门到项目实战-- 8.5】—— 使用HTTP协议访问网络的实践用法
  • 命令设计模式
  • python基本数据类型---数字字符串
  • 有关教育的几段话
  • 基于zookeeper实现分布式锁
  • 【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)
  • 特征向量中心度(Eigenvector Centrality)
  • Kali 安装中文输入法(超详细)
  • 中级软件设计师备考---软件工程1
  • git上传大大大文件项目好折磨人
  • k8s之审计日志
  • 微机作业题
  • 字节跳动测试岗面试挂在2面,复盘后,我总结了失败原因,决定再战一次...
  • (别再手动点APP了)UiAutomator2自动化测试框架带你玩转APP操作
  • 模拟银行账户转账业务