深入浅出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.mfbz.cn/a/572548.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短视频矩阵系统源码====3年技术公司源头开发商交付

短视频矩阵系统#源头技术打磨 哈尔滨爆火带动了一波“北上热潮”&#xff0c;各地文旅坐不住了&#xff0c;兄弟们开“卷”&#xff01;这波互卷浪潮中&#xff0c;河南率先出圈。如今&#xff0c;河南文旅账号粉丝已经突破200w&#xff01; 01 矩阵打法&#xff0c;很难不火…

超越边界:如何ChatGPT 3.5、GPT-4、DALL·E 3和Midjourney共同重塑创意产业

KKAI&#xff08;kkai人工智能&#xff09;是一个整合了多种尖端人工智能技术的多功能助手平台&#xff0c;融合了OpenAI开发的ChatGPT3.5、GPT4.0以及DALLE 3&#xff0c;并包括了独立的图像生成AI—Midjourney。以下是这些技术的详细介绍&#xff1a; **ChatGPT3.5**&#xf…

Lab2: system calls

Using gdb Looking at the backtrace output, which function called syscall? 可以看到是trap.c中usertrap函数调用了syscall函数 What is the value of p->trapframe->a7 and what does that value represent? p->trapframe->a7的值为7&#xff0c;代表了函…

MATLAB 条件语句

MATLAB 条件语句 决策结构要求程序员应指定一个或多个要由程序评估或测试的条件&#xff0c;如果确定条件为真&#xff0c;则应指定要执行的一个或多个语句&#xff0c;如果条件为真&#xff0c;则可以选择要执行的其他语句。条件确定为假。 以下是大多数编程语言中常见的典型…

我们支持批量了!

当我们有很多文件要处理时&#xff0c;一个一个操作不仅费时费力&#xff0c;而且还容易漏掉某个文件。那么有没有更加简单的方法呢&#xff1f;可以试试批量功能&#xff01; 目前以下功能都支持批量操作 音频提取 视频格式转换 字幕生成 视频静音 图片格式转换 图片压缩 视频…

JavaScript —— APIs(四)

一、日期对象 1. 实例化 new 括号里面为空&#xff0c;得到当前时刻的时间 括号里面为指定日期&#xff0c;得到对应日期的时间 注意&#xff1a;若括号里面只有年月日&#xff0c;没有时间&#xff0c;则得到的结果就没有时间&#xff1b;括号里面指定时间是多少&#xff0c;…

身份证二要素核验介绍及使用方法

一、身份证二要素核验简介及重要性 身份证二要素核验是一种重要的身份验证技术&#xff0c;它在现代社会中发挥着至关重要的作用&#xff0c;特别是在涉及个人信息安全和隐私保护的领域。通过身份证二要素核验&#xff0c;我们可以有效地确认个人身份的真实性&#xff0c;从而…

爬虫学习笔记-数美验证

测试网址&#xff1a;智能验证码体验_图片验证码_数美科技数美科技智能验证码在线体验&#xff0c;智能识别风险用户级别&#xff0c;自行切换智能验证码难度及类型&#xff0c;提供滑动、拼图、点选、数字、动态等多种智能验证码服务&#xff0c;精准拦截机器行为。https://ww…

SOLIDWORKS Composer如何使用3D工具实现更真实的动画效果

当我们使用SOLIDWORKS composer创建动画时&#xff0c;往往会涉及到产品的安装与拆解&#xff0c;现实生活中我们在拆卸组装产品的时候&#xff0c;我们往往需要一些工具的协助&#xff0c;比如扳手、螺丝刀等等&#xff0c;那么我们如何在虚拟动画中也将这一过程以逼真的形式展…

新建云仓库

1.GitHub新建云仓库&#xff1a; LICENSE:开源许可证&#xff1b;README.md:仓库说明文件&#xff1b;开源项目&#xff1b;cocoaPodsName.podspec: CocoaPods项目的属性描述文件。 2.Coding新建云仓库&#xff1a; 备注&#xff1a; Coding新建项目&#xff1a;

STM32,复位和时钟控制

外部时钟 HSE 以后需要用到什么就这样直接拿去配就行了

左叶子之和(力扣404)

解题思路:用后序遍历找左孩子&#xff0c;需要注意的是左叶子需要通过其父节点来判断其是不是左叶子 具体代码&#xff1a; class Solution { public: int sumOfLeftLeaves(TreeNode * root) { if(rootNULL)return 0; if(root->leftNULL&&root->rightNULL)ret…

纳米尺度下的单粒子追踪,厦门大学方宁团队用 AI 奏响「细胞里的摇滚」

在微观世界里&#xff0c;每一个细胞都是一个繁忙的城市&#xff0c;而分子们则是这个城市中的居民。想象一下&#xff0c;如果我们能够追踪这些居民的每一个动作&#xff0c;或许便能够揭开生命奥秘的一角。这就是科学家们在活细胞中进行 3D 单粒子跟踪 (single particle trac…

lua整合redis

文章目录 lua基础只适合lua连接操作redis1.下载lua依赖2.导包,连接3.常用的命令1.set,get,push命令 2.自增管道命令命令集合4.使用redis操作lua1.实现秒杀功能synchronized关键字 分布式锁 lua 基础只适合 1.编译 -- 编译 luac a.lua -- 运行 lua a.lua2.命名规范 -- 多行注…

数字化转型成功的企业到底是什么样的?

数字化转型成功的企业通常具备以下特征&#xff1a; 1、以客户为中心的业务模式&#xff1a;成功的数字化转型企业将客户放在业务模式的核心位置&#xff0c;通过提供个性化的服务和产品来满足客户需求。这种以客户为中心的模式能够带来更好的客户体验和忠诚度。 2、强大的数…

Power BI 如何解决月份排序错误/乱序问题(自定义顺序/正确排序)

问题描述 在创建图标时&#xff0c;月份标签没有按照正确的顺序排列。 解决方案&#xff1a; Sort by Column 单击选中排序错误的列&#xff08;MMM&#xff09;根据列排序 (sort by Column)选择需要根据哪一列排序。 这里选择的是Month列&#xff0c;这一列有月份的序号1-…

Golang——GMP原理与调度

一. Golang调度器的由来 1.1 单进程时代不需要调度器 我们知道&#xff0c;一切软件都跑在操作系统上&#xff0c;真正用来干活(计算)的是CPU。早期的操作系统每一个程序就是一个进程&#xff0c;直到一个程序运行完&#xff0c;才能进行下一个进程&#xff0c;就是"单进程…

CSS盒子模型与常见问题

CSS盒子模型 显示模式转换显示模式 盒子模型边框线内边距padding 多值写法 尺寸计算与内减法模式外边距 清除默认样式元素溢出外边距问题合并现象塌陷现象 行内元素 – 内外边距问题 显示模式 显示模式&#xff1a;标签&#xff08;元素&#xff09;的显示方式作用&#xff1a;…

C++中的数制转换工具

一、引言 在编程和日常计算中&#xff0c;我们经常需要在不同的数制之间进行转换。二进制、十进制和十六进制是最常用的数制。二进制是计算机内部处理数据的基础&#xff0c;十进制是我们日常生活中最常用的数制&#xff0c;而十六进制则在编程和硬件相关领域中广泛使用。 二…

不要摆摊,不要开早餐店,原因如下

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我最近开通了视频号会员专区嘛&#xff0c;专区有个问答功能可以提问&#xff0c;有个会员问了我问题&#xff0c;其中一条问答分享给大家&#xff1a; 松哥&#xff0c;突然想去兼职&#xff0c;早上卖点杂粮煎饼果…
最新文章