深入浅出MySQL-03-【MySQL中的运算符】

文章目录

  • 前言
  • 1.算术运算符
  • 2.比较运算符
  • 3.逻辑操作符
  • 4.位运算符
  • 5.运算符的优先级

前言

环境:

  • Windows11
  • MySQL-8.0.35

MySQL支持多种类型的运算符,可以用来连接表达式的项。运算符的类型主要包括 算术运算符、比较运算符、逻辑运算符 和 位运算符。

1.算术运算符

算术运算符包括 加、减、乘、除 和 模 运算符。

运算符作用
+加法
-减法
*乘法
/,DIV除法,返回商
%,MOD除法,返回余数

这几种运算符的简单使用如下:

mysql> select 0.1+0.333, 0.1-0.333, 0.1*0.333, 1/2, 1%2;
+-----------+-----------+-----------+--------+------+
| 0.1+0.333 | 0.1-0.333 | 0.1*0.333 | 1/2    | 1%2  |
+-----------+-----------+-----------+--------+------+
|     0.433 |    -0.233 |    0.0333 | 0.5000 |    1 |
+-----------+-----------+-----------+--------+------+
1 row in set (0.01 sec)

在 除法 和 模 运算中,如果除数是0,将是非法除数,返回结果为null,如下:

// 除数为0是可以的
mysql> select 0/2,0%2;
+--------+------+
| 0/2    | 0%2  |
+--------+------+
| 0.0000 |    0 |
+--------+------+
1 row in set (0.00 sec)// 被除数如果为0,非法,返回null
mysql> select 2/0, 2%0;
+------+------+
| 2/0  | 2%0  |
+------+------+
| NULL | NULL |
+------+------+
1 row in set, 2 warnings (0.00 sec)

除法 和 模 运算符中,分别还有 DIV 和 MOD 的使用,说明如下:

  • DIV是一个整数除法操作符。它会返回两个数的商,并丢弃任何小数部分。而除法操作符/,它会返回两个数相除的浮点结果,如下:
// 这里,10除以3的结果是3.3333...,但由于DIV是整数除法,所以它只返回整数部分,即3。
mysql> select 10/3, 10 DIV 3, 10 div 3;
+--------+----------+----------+
| 10/3   | 10 DIV 3 | 10 div 3 |
+--------+----------+----------+
| 3.3333 |        3 |        3 |
+--------+----------+----------+
1 row in set (0.00 sec)
  • MOD是一个取模操作符。它会返回两个数相除后的余数,这和 % 的使用效果是一样的,如下:
mysql> select 10%3, MOD(10,3), mod(10,3), 10 MOD 3, 10 mod 3;
+------+-----------+-----------+----------+----------+
| 10%3 | MOD(10,3) | mod(10,3) | 10 MOD 3 | 10 mod 3 |
+------+-----------+-----------+----------+----------+
|    1 |         1 |         1 |        1 |        1 |
+------+-----------+-----------+----------+----------+
1 row in set (0.00 sec)

2.比较运算符

当时用SELECT查询的时候,允许对表达式左侧和右侧的操作数进行比较,比较结果为真,则返回1,为假则返回0,比较结果不确定则返回NULL

运算符作用
=等于
<>或!=不等于
<=>NULL安全的等于(NULL-safe)
小于
<=小于等于
>大于
>=大于等于
BETWEEN存在于指定范围
IN存在于指定集合
IS NULL为NULL
IS NOT NULL不为NULL
LIKE通配符匹配
REGEXP 或 RLIKE正则表达式

比较运算符可以比较 数字、字符串 和 表达式。数字作为浮点数比较,字符串以不区分大小写的方式进行比较。

  • = 运算符,用于比较两侧的操作数是否相等,但是NULL不能用于 = 比较,如下:
mysql> select 1=0, 1=1, NULL=NULL, null=null, null=NULL;
+-----+-----+-----------+-----------+-----------+
| 1=0 | 1=1 | NULL=NULL | null=null | null=NULL |
+-----+-----+-----------+-----------+-----------+
|   0 |   1 |      NULL |      NULL |      NULL |
+-----+-----+-----------+-----------+-----------+
1 row in set (0.00 sec)
  • <>/!= 运算符,和 = 相反,同样NULL不能用于此比较,如下:
mysql> select 1!=0, 1<>0, 1<>1, null<>null;
+------+------+------+------------+
| 1!=0 | 1<>0 | 1<>1 | null<>null |
+------+------+------+------------+
|    1 |    1 |    0 |       NULL |
+------+------+------+------------+
1 row in set (0.00 sec)
  • <=> 运算符,和 = 运算符类似,不同之处在于即使操作的值为NULL,也可以正确比较,也就是可以用比较NULL,如下:
mysql> select 1=0, 1=1, null=null, null<=>null, null<=>NULL;
+-----+-----+-----------+-------------+-------------+
| 1=0 | 1=1 | null=null | null<=>null | null<=>NULL |
+-----+-----+-----------+-------------+-------------+
|   0 |   1 |      NULL |           1 |           1 |
+-----+-----+-----------+-------------+-------------+
1 row in set (0.00 sec)
  • <、<=、>、>= 操作符,这几个好理解,不多做解释,如下:
mysql> select 1<2, 'a'<'b', 'bdf'<='b', 'b'<='b', 'a'>'b', 'abc'>'a', 1>0, 'a'>='b','abc'>='a', 1>=0, 1>=1;
+-----+---------+------------+----------+---------+-----------+-----+----------+------------+------+------+
| 1<2 | 'a'<'b' | 'bdf'<='b' | 'b'<='b' | 'a'>'b' | 'abc'>'a' | 1>0 | 'a'>='b' | 'abc'>='a' | 1>=0 | 1>=1 |
+-----+---------+------------+----------+---------+-----------+-----+----------+------------+------+------+
|   1 |       1 |          0 |        1 |       0 |         1 |   1 |        0 |          1 |    1 |    1 |
+-----+---------+------------+----------+---------+-----------+-----+----------+------------+------+------+
1 row in set (0.00 sec)
  • BETWEEN 操作符,使用格式为 a BETWEEN min AND max,当 a 的值大于等于 min 并且小于等于 max,则返回值1,否则返回0。当 a,min,max类型相同时,表达式等价于 a >= min and a <= max,当类型不同时,比较会遵循类型转换原则进行转换后,再进行比较运算。
mysql> select 10 between 10 and 20, 9 between 10 and 20;
+----------------------+---------------------+
| 10 between 10 and 20 | 9 between 10 and 20 |
+----------------------+---------------------+
|                    1 |                   0 |
+----------------------+---------------------+
1 row in set (0.05 sec)
  • IN 操作符,使用格式为 a IN (value1, value2, …, valuen),当 a 的值在列表中,返回1,否则返回0。
mysql> select 1 in (1,2,3), 't' in ('t','a','b'), 0 in (1,2);
+--------------+----------------------+------------+
| 1 in (1,2,3) | 't' in ('t','a','b') | 0 in (1,2) |
+--------------+----------------------+------------+
|            1 |                    1 |          0 |
+--------------+----------------------+------------+
1 row in set (0.00 sec)
  • IS NULL 运算符,使用格式为 a IS NULL,a的值为NULL返回1,否则返回0.
mysql> select 0 is null, null is null;
+-----------+--------------+
| 0 is null | null is null |
+-----------+--------------+
|         0 |            1 |
+-----------+--------------+
1 row in set (0.00 sec)
  • IS NOT NULL 操作符,格式为 a IS NOT NULL,和 IS NULL 相反。
mysql> select 0 is not null, null is not null;
+---------------+------------------+
| 0 is not null | null is not null |
+---------------+------------------+
|             1 |                0 |
+---------------+------------------+
1 row in set (0.00 sec)
  • LIKE 操作符,格式为 a LIKE %123%,当 a 的值中含有字符串 123 时,返回1,否则返回0。
mysql> select 123321 like '%123%', 123456 like '%123%', 123456 like '%321%';
+---------------------+---------------------+---------------------+
| 123321 like '%123%' | 123456 like '%123%' | 123456 like '%321%' |
+---------------------+---------------------+---------------------+
|                   1 |                   1 |                   0 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
  • REGEXP/RLIKE 操作符,使用格式为 str REGEXP str_pat,当str字符串中含有str_pat相匹配的字符串时,返回1,否则返回0。这里只是介绍操作符,具体REGEXP的使用,后续会说到。
mysql> select 'abcded' regexp 'cd', 'abcded' rlike 'cd', 'abc' regexp 'cd';
+----------------------+---------------------+-------------------+
| 'abcded' regexp 'cd' | 'abcded' rlike 'cd' | 'abc' regexp 'cd' |
+----------------------+---------------------+-------------------+
|                    1 |                   1 |                 0 |
+----------------------+---------------------+-------------------+
1 row in set (0.00 sec)

3.逻辑操作符

又称为布尔运算符,确认表达式的真假。

运算符作用
NOT 或 !逻辑非
AND 或 &&逻辑与
OR 或 ||逻辑或
XOR逻辑异或
  • NOT / ! 操作符,表示逻辑非,返回和操作数相反的结果,操作数为0-假,则返回1-真。但有一点除外,那就是 NOT NULL 的返回值为NULL。
mysql> select not 1, not 0, !1, !0, not null;
+-------+-------+----+----+----------+
| not 1 | not 0 | !1 | !0 | not null |
+-------+-------+----+----+----------+
|     0 |     1 |  0 |  1 |     NULL |
+-------+-------+----+----+----------+
1 row in set, 2 warnings (0.01 sec)
  • AND / && 操作符,逻辑与,当所有的操作数均为非零值并且不为NULL时,结果为1,当一个或多个操作数为0时,结果就为0。操作数中有任何一个为NULL,则返回值为NULL,如下:
mysql> select 1 and 1, 1 && 0, 1 and null;
+---------+--------+------------+
| 1 and 1 | 1 && 0 | 1 and null |
+---------+--------+------------+
|       1 |      0 |       NULL |
+---------+--------+------------+
1 row in set, 1 warning (0.01 sec)
  • OR / || 操作符,逻辑或,当多个操作数都是非NULL时,如果任意一个数为非0的值,则结果为1,否则结果为0(都是0)。当有一个操作数为NULL,其他的操作数为非0时,结果也是1,否则结果为NULL。如果多个操作数都是NULL,结果为NULL。
mysql> select 1 or 0, 0 || 0, 0 or null, 1 or null, null or null;
+--------+--------+-----------+-----------+--------------+
| 1 or 0 | 0 || 0 | 0 or null | 1 or null | null or null |
+--------+--------+-----------+-----------+--------------+
|      1 |      0 |      NULL |         1 |         NULL |
+--------+--------+-----------+-----------+--------------+
1 row in set, 1 warning (0.00 sec)
  • XOR,逻辑异或,任意一个操作数为NULL时,返回NULL。对于非NULL的操作数,如果两个的逻辑真假值相异,返回结果1,否则返回0。
mysql> select 1 xor 1, 0 xor 0, 1 xor 0, null xor 0;
+---------+---------+---------+------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | null xor 0 |
+---------+---------+---------+------------+
|       0 |       0 |       1 |       NULL |
+---------+---------+---------+------------+
1 row in set (0.01 sec)

4.位运算符

将给定的操作数转化为二进制后,对各个操作数每一位进行指定的逻辑运算,得到的二进制结果转换为十进制后就是位运算的结果。

运算符作用
&位与(位AND)
|位或(位OR)
^位异(位XOR)
~位取反
>>位右移
<<位左移

位运算符这里不多做讲解说明。

5.运算符的优先级

以上这么多运算符,很可能混合使用,那么它们的优先级是什么呢?如下:

优先级高到低运算符
1:=
2||、OR、XOR
3&&、AND
4NOT
5BETWEEN、CASE、WHEN、THEN、ELSE
6=、<=>、>=、>、<、<=、<>、!=、IS、LIKE、REGEXT、IN
7|
8&
9<<、>>
10-、+
11*、/、DIV、%、MOD
12^
13- 和 ~
14!

实际上,没人记得住这些,实际使用我们都是用 ()将需要有限的操作括起来,这样可以起到优先的作用,又方便理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在vue项目中使用TS

在vue项目中使用TS 1. 将vue项目注入ts 引入和使用 webpack的打包配置&#xff1a;vue-cli webnpack 编译时 entry 入口 设置 entry: {app: ./src/maikn.ts }2. resolve: extensions 添加 ts 用于处理尝试的数据尾缀列表 问&#xff1a; 如何在webpack新增处理类型文件&am…

函数递归与迭代

目录 1.递归 1.1递归的思想 1.2递归的限制条件 2.递归与迭代 1.递归 函数递归是什么&#xff1f; 递归是学习C语⾔函数绕不开的⼀个话题&#xff0c;那什么是递归呢? 递归其实是⼀种解决问题的⽅法&#xff0c;在C语⾔中&#xff0c;递归就是函数⾃⼰调⽤⾃⼰。 写⼀个史…

代码随想录算法训练营第五十三天| 1143.最长公共子序列 ,1035.不相交的线,53. 最大子序和 动态规划

题目与题解 1143.最长公共子序列 题目链接&#xff1a;1143.最长公共子序列 代码随想录题解&#xff1a;​​​​​​​1143.最长公共子序列 视频讲解&#xff1a;动态规划子序列问题经典题目 | LeetCode&#xff1a;1143.最长公共子序列_哔哩哔哩_bilibili 解题思路&#xff…

Linux Makefile编写之可执行程序

1 概述 编译工具有很多(make/cmake/BJam)。如果不考虑跨平台的话&#xff0c;还是make比较方便。使用make编译需要编写Makefile。本文编写Makefile来生成C/C可执行程序。 2 Makefile文件命名 Makefile文件首先是一个文本文件&#xff0c;Linux下默认有两种命名方式: Makefil…

DBSCAN算法学习

DBSCAN算法 文章目录 DBSCAN算法概述应用场景优缺点基于sklearn库的样例DBSCAN、分层聚类和K均值聚类比较 概述 DBSCAN算法是一种基于密度的聚类算法&#xff0c;能够自动识别不同的簇&#xff0c;并与噪声数据分开。以下是关于DBSCAN算法的重要知识点概述&#xff1a; 基本概…

vue3中如何父组件中使用弹框,子组件中关闭弹框

子组件: <template><el-dialogv-model"visible"title"Tips"width"500"><div class"left"></div><div class"right"></div><template #footer><div class"dialog-footer…

Learning to Upsample by Learning to Sample

摘要 论文&#xff1a;https://arxiv.org/pdf/2308.15085 我们提出了DySample&#xff0c;一个超轻量级且高效的动态上采样器。虽然最近的基于内核的动态上采样器&#xff0c;如CARAFE、FADE和SAPA&#xff0c;取得了令人印象深刻的性能提升&#xff0c;但它们引入了大量的计算…

前端实现文件下载的方法

一、简介 ​ 之前我分享过《前端实现图片下载的方法》&#xff0c;但那只是针对图片下载的方法。本博客分享的是对于文件的下载方法&#xff0c;包括图片文件和非图片文件的下载&#xff0c;例如png、doc、pdf、ppt等等。 ​ 当然&#xff0c;还是那个大前提&#xff1a;在任…

大模型对数字营销的驱动赋能

一、大模型驱动的营销数智化个信未来发展趋势 1.模型算法能力全面升级 大模型凭借智能化的用户洞察&#xff0c;个性化的需求预测、系统化的数据分析、效率化的营销决策以及实实化的全域检测支持&#xff0c;为营销行业更加准确地把握市场动态和消费者需求提供了强大支持。可以…

Spring Boot 如何实现缓存预热

Spring Boot 实现缓存预热 1、使用启动监听事件实现缓存预热。2、使用 PostConstruct 注解实现缓存预热。3、使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。4、通过实现 InitializingBean 接口&#xff0c;并重写 afterPropertiesSet 方法实现缓存预热。 1、使用…

数据结构和算法:贪心

贪心算法 贪心算法是一种常见的解决优化问题的算法&#xff0c;其基本思想是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决策&#xff0c;以期获得全局最优解。 贪心算法和动态规划都常用于解决优化问题。它们之间存在一…

TCP/IP协议族中的TCP(二):解析其关键特性与机制

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 滑动窗口 在前面我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段.这样…

力扣HOT100 - 98. 验证二叉搜索树

解题思路&#xff1a; class Solution {public boolean isValidBST(TreeNode root) {return recur(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean recur(TreeNode root,long lower,long upper){if(rootnull) return true;if(root.val<lower||root.val>upper) re…

HTTP Host 头攻击 原理以及修复方法

漏洞名称 &#xff1a;HTTP Host头攻击 漏洞描述&#xff1a; 一般通用web程序是如果想知道网站域名不是一件简单的事情&#xff0c;如果用一个固定的URI来作为域名会有各种麻烦。开发人员一般是依赖HTTP Host header&#xff08;比如在php里_SERVER["HTTP_HOST"] …

Ubuntu上的screenfetch

2024年4月28日&#xff0c;周日下午 这些文本是由一个叫做 “screenfetch” 的命令生成的&#xff0c;它会显示一些系统和用户信息&#xff0c;包括操作系统、内核版本、系统运行时间、安装的软件包数量、使用的Shell、分辨率、桌面环境、窗口管理器、主题、图标主题、字体、CP…

K8s: 应用项目部署运维环境搭建

使用 StatefulSet 部署 Mysql 数据库环境准备是应用的前置准备工作 先在 node 节点上安装 mysql $ sudo yum install mysql-server -y 安装$ sudo systemctl start mysqld 启动$ sudo systemctl enable mysqld 设置开启启动$ sudo mysql_secure_installation 设置安全选项$ my…

Matlab进阶绘图第51期—带填充等高线的三维特征渲染散点图

带填充等高线的三维特征渲染散点图是填充等高线图与特征渲染三维散点图的组合。 其中&#xff0c;填充等高线图与特征渲染的三维散点图的颜色用于表示同一个特征。 由于填充等高线图无遮挡但不直观&#xff0c;特征渲染的三维散点图直观但有遮挡&#xff0c;而将二者组合&…

MySQL数据库进阶篇二(优化、视图/存储过程/存储函数/触发器)

目录 一、SQL优化1.1、插入数据1.2、主键优化1.3、order by优化1.4、group by优化1.5、limit优化1.6、count优化1.7、update优化 二、视图/存储过程/存储函数/触发器2.1、视图2.2、存储过程2.3、存储函数2.4、触发器 一、SQL优化 分为&#xff1a;插入数据优化&#xff0c;主键…

一文了解——企业网站为什么需要安装SSL证书 !

企业网站安装SSL证书主要是出于以下几个关键原因&#xff1a; 1. 数据加密&#xff1a;SSL证书能确保网站与用户浏览器之间的数据传输是加密的&#xff0c;保护敏感信息&#xff08;如登录凭据、个人信息、交易数据&#xff09;不被第三方截取或篡改&#xff0c;维护用户隐私安…

Apache Flink:流式数据处理的新典范

在大数据处理领域&#xff0c;Apache Flink以其强大的流式数据处理能力&#xff0c;逐渐成为了业界的新宠。Flink是一个分布式流处理框架&#xff0c;能够处理无界和有界数据流&#xff0c;提供了高吞吐、低延迟的数据处理能力。 Flink的核心优势在于其流处理和批处理的统一模…