MySQL:操作符
MySQL 操作符
MySQL 操作符是 MySQL 数据库操作中不可或缺的一部分,它们用于执行各种数据运算、比较、逻辑判断等。
-
MySQL 中有多种操作符可用于数据查询和筛选
-
MySQL 所提供的运算符可以直接对表中数据或字段进行运算
-
MySQL 支持 4 种运算符,分别是:算术运算符、比较预算符、逻辑运算符、位运算符
算术运算符
执行算术运算,它们是最常用、最简单的一类运算符。
| 运算符 | 作用 | 使用方法 |
|---|---|---|
| + | 加法运算 | 用于获得一个或多个值的和 |
| - | 减法运算 | 用于从一个值中减去另一个值 |
| * | 乘法运算 | 使数字相乘,得到两个或多个值的乘积 |
| / | 除法运算,返回商 | 用一个值除以另一个值得到商 |
| %, MOD(a,b)=>a%b | 求余运算,返回余数 | 用一个值除以另一个值得到余数 |
-
行除法运算时,由于 64 无法被 3 整除,因此 MySQL 对 64/3 求商的结果保存到了小数点后面四位,结果为 21.3333
-
除数为 0 的除法是没有意义的。所以在除法运算和取余运算中,如果除数为 0,返回结果为 NULL
比较运算符
主要用于数值的比较、字符串的匹配(字符串比较不区分大小写)、表达式的值等。
当使用 SELECT 语句进行查询时,MySQL 允许用户对表达式的左边操作数和右边操作数进行比较,比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL。
| 运算符 | 作用 |
|---|---|
| = | 等于 |
| <=> | 安全的等于 |
| <> 或者 != | 不等于 |
| <= | 小于等于 |
| >= | 大于等于 |
| > | 大于 |
| IS NULL 或者 ISNULL | 判断一个值是否为空 |
| IS NOT NULL | 判断一个值是否不为空 |
| BETWEEN AND | 判断一个值是否落在两个值之间 |
1)等于运算(=)
- 若有一个或两个操作数为 NULL,则比较运算的结果为 NULL。
- 若两个操作数都是字符串,则按照字符串进行比较。
- 若两个操作数均为整数,则按照整数进行比较。
- 若一个操作数为字符串,另一个操作数为数字,则 MySQL 可以自动将字符串转换为数字。
- NULL不能被用于比较运算。
2)安全等于运算符 (<=>)
<=> 操作符和 = 操作符类似,但 <=> 可以用来判断 NULL 值:
- 当两个操作数均为 NULL 时,其返回值为 1 而不为 NULL;
- 当一个操作数为 NULL 时,其返回值为 0 而不为 NULL。
3)不等于运算符(< > 或 !=)
<> 和 != 用于判断数字、字符串、表达式是否不相等。
- 对于
<>和!=,如果两侧操作数不相等,返回值为 1,否则返回值为 0; - 如果两侧操作数有一个是 NULL,那么返回值也是 NULL。
4) 比大小运算符( >、<、>=、<= )
- 条件成立返回值为1,否则返回值为0。
- 如果两侧操作数有一个是 NULL,那么返回值也是 NULL。
5)BETWEEN AND 运算符
BETWEEN AND 运算符用来判断表达式的值是否位于两个数之间,或者说是否位于某个范围内,语法格式如下:
expr BETWEEN low AND high#等价于
expr >= low AND value <= high
expr 表示要判断的表达式,low 表示最小值,high 表示最大值。如果
expr 大于等于 low 并且小于等于 high,则返回值为 1,否则返回值为 0。
- 对于字符串类型的比较,按字母表中字母顺序进行比较。
- 若expr、low、high中任一一个值为NULL,则返回值为NULL
NOT BETWEEN AND
expr NOT BETWEEN low AND high#等价于
expr < low OR expr > high
expr 小于 low 并且大于 high,则返回值为 1,否则返回值为 0。
逻辑(布尔)运算符
包括与、或、非和异或、等逻辑运算符。其返回值为布尔型,真值(1 或 true)和假值(0 或 false)。
| 运算符 | 作用 |
|---|---|
| NOT 或者 ! | 逻辑非 |
| AND 或者 && | 逻辑与 |
| OR 和 | | 逻辑或 |
| XOR | 逻辑异或 |
1) 逻辑非运算(NOT 或者 !)
NOT 和 ! 都是逻辑非运算符,返回和操作数相反的结果:
-
当操作数为 0(假)时,返回值为 1;
-
当操作数为非零值时,返回值为 0;
-
当操作数为 NULL 时,返回值为 NULL
-
需要注意的是,
NOT的优先级要低于+,而!的优先级别要高于+在使用运算符运算时,一定要注意运算符的优先级,如果不能确定计算顺序,最好使用括号,以保证运算结果的正确。
2)逻辑与运算符(AND 或者 &&)
- 当所有操作数都为非零值并且不为 NULL 时,返回值为 1;
- 当一个或多个操作数为 0 时,返回值为 0;
- 操作数中有任何一个为 NULL 时,返回值为 NULL。
- 0 AND NULL == 0
AND运算符可以有多个操作数,要注意多个操作数运算时,AND 两边要使用空格隔开,否则影响结果的正确性。
| TRUE | FALSE | NULL | |
|---|---|---|---|
| TRUE | TRUE | FALSE | NULL |
| FALSE | FALSE | FALSE | FALSE |
| NULL | NULL | FALSE | NULL |
3)逻辑或运算符(OR 或者 ||)
- 当两个操作数都为非 NULL 值时,如果有任意一个操作数为非零值,则返回值为 1,否则结果为 0;
- 当有一个操作数为 NULL 时,如果另一个操作数为非零值,则返回值为 1,否则结果为NULL;
- 假如两个操作数均为 NULL 时,则返回值为 NULL。
| TRUE | FALSE | NULL | |
| TRUE | TRUE | TRUE | TRUE |
| FALSE | TRUE | FALSE | NULL |
| NULL | TRUE | NULL | NULL |
4)异或运算(XOR 运算符)
XOR 表示逻辑异或:
-
当任意一个操作数为 NULL 时,返回值为 NULL;
-
对于非 NULL 的操作数,如果两个操作数都是非 0 值或者都是 0 值,则返回值为 0;
-
如果一个为0值,另一个为非 0 值,返回值为 1。
-
a XOR b 的计算等同于 (a AND (NOT b))或者 ((NOT a) AND b)。
位运算符
包括按位与、按位或、按位取反、按位异或、按位左移和按位右移等位运算符。
位运算必须先将数据转换为补码,然后在根据数据的补码进行操作。运算完成后,将得到的值转换为原来的类型(十进制数),返回给用户。
位运算一般用于操作整数,对整数进行位运算才有实际的意义。整数在内存中是以补码形式存储的,正数的补码形式和原码形式相同,
而负数的补码形式和它的原码形式是不一样的,对负数进行位运算时,操作的是它的补码,而不是它的原码。
| 运算符 | 说明 | 使用形式 | 举例 |
|---|---|---|---|
| | | 位或 | a | b | 5 |8 |
| & | 位与 | a & b | 5 & 8 |
| ^ | 位异或 | a ^ b | 5 ^ 8 |
| ~ | 位取反 | ~a | ~5 |
| << | 位左移 | a << b | 5 << 2,表示整数 5 按位左移 2 位 |
| >> | 位右移 | a >> b | 5 >> 2,表示整数 5 按位右移 2 位 |
运算符优先级
| 优先级由低到高排列 | 运算符 |
|---|---|
| 1 | =(赋值运算)、:= |
| 2 | II、OR |
| 3 | XOR |
| 4 | &&、AND |
| 5 | NOT |
| 6 | BETWEEN、CASE、WHEN、THEN、ELSE |
| 7 | =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN |
| 8 | | |
| 9 | & |
| 10 | <<、>> |
| 11 | -(减号)、+ |
| 12 | *、/、% |
| 13 | ^ |
| 14 | -(负号)、〜(位反转) |
| 15 | ! |
一般情况下,级别高的运算符优先进行计算,如果级别相同,MySQL 按表达式的顺序从左到右依次计算。
在无法确定优先级的情况下,可以使用圆括号“()”来改变优先级,并且这样会使计算过程更加清晰。
集合运算符
| 运算符 | 含义 | 英文 |
|---|---|---|
| ∪ ∪ ∪ | 并 | Union |
| − − − | 差 | Difference |
| ∩ ∩ ∩ | 交 | Intersection |
| × × × | 笛卡尔积 | Cartesian Product |
专门的关系运算符
| 运算符 | 含义 | 英文 |
|---|---|---|
| σ σ σ | 选择 | Selection |
| π π π | 投影 | Projection |
| ⋈ ⋈ ⋈ | 链接 | Join |
| ÷ ÷ ÷ | 除 | Division |
IN 、NOT 和 NOT IN
NOT
NOT 是一个逻辑操作符,用于取反给定的条件或表达式的结果。它可以用于多个地方,例如 WHERE 子句、JOIN 条件和其他逻辑表达式。
语法结构:
NOT conditionSELECT NOT true; -- 返回 false
SELECT NOT false; -- 返回 true
SELECT NOT NULL; -- 返回 NULL
在三值逻辑中,NULL 既不等于 true,也不等于 false,而是表示未知或缺失的值。因此,在使用 NOT 操作符时,如果条件或表达式的结果为 NULL,NOT 将返回 NULL。
IN 和 NOT IN
IN 运算符用来判断表达式的值是否位于给出的列表中;如果是,返回值为 1,否则返回值为 0。
NOT IN 用来判断表达式的值是否不存在于给出的列表中;如果不是,返回值为 1,否则返回值为 0。
IN 和 NOT IN 的语法结构:
SELECT column1, column2, ...
FROM table_name
WHERE column_name IN / NOT IN (value1, value2, ...);
column_name 是要匹配的列名,(value1, value2, ...) 是要匹配列中的值的列表。查询将返回在列中匹配任一值的行。
-
这些操作符对于在
WHERE子句中过滤数据非常有用,以便针对特定的值或值列表进行查询。 -
值列表可以是一个具体的值,也可以是一个子查询的结果。
'''
名为 `employees` 的表,其中包含员工的信息,
查询部门编号为 1、3 和 5 的员工
'''
SELECT *
FROM employees
WHERE department_id IN (1, 3, 5);
对空值NULL的处理
当 IN 运算符的两侧有一个为空值 NULL 时,如果找不到匹配项,则返回值为 NULL;如果找到了匹配项,则返回值为 1。
当 NOT IN 运算符的两侧有一个为空值 NULL 时,如果找不到匹配项,则返回值为 NULL;如果找到了匹配项,则返回值为 0
- NULL != NULL
LIKE
LIKE 是一个用于模式匹配的操作符。它通常与 [[Filtering data in Tables#WHERE query by condition|WHERE]] 子句一起使用,用于在查询中选择满足指定模式条件的数据。
语法格式:
column_name LIKE pattern [ESCAPE escape_character]
LIKE 运算符使用通配符来匹配字符串。常用的通配符有两个:
%:代表零个或多个字符。_:代表一个字符。
-- 匹配以 "A" 开头的字符串
SELECT column_name
FROM table_name
WHERE column_name LIKE 'A%';-- 匹配以 "ab" 结尾的字符串
SELECT column_name
FROM table_name
WHERE column_name LIKE '%ab';-- 匹配包含 "abc" 的字符串
SELECT column_name
FROM table_name
WHERE column_name LIKE '%abc%';-- 匹配以 "a" 开头,以 "b" 结尾,且中间有一个字符的字符串
SELECT column_name
FROM table_name
WHERE column_name LIKE 'a_b';
ESCAPE 是用于指定转义字符的关键字,用于指定在进行模式匹配时要使用的自定义转义字符。
有时需要在模式中匹配这些占位符本身,而不是作为通配符。此时需要使用 反斜杠符号 ‘\’ 或 ESCAPE 关键字来指定一个转义字符来转义这些占位符。
'''查询包含 '_20' 的数据'''# 直接使用反斜杠
SELECT * FROM product WHERE serial LIKE '%/_20%';# 使用ESCAPE关键字
SELECT * FROM product WHERE serial LIKE '%$_20%' ESCAPE '$';
SELECT * FROM product WHERE serial LIKE '%_20%' ESCAPE '\' ;
相关文章:
MySQL:操作符
MySQL 操作符 MySQL 操作符是 MySQL 数据库操作中不可或缺的一部分,它们用于执行各种数据运算、比较、逻辑判断等。 MySQL 中有多种操作符可用于数据查询和筛选 MySQL 所提供的运算符可以直接对表中数据或字段进行运算 MySQL 支持 4 种运算符,分别是&…...
反序列化靶机实战serial(保姆级教程)
一.信息收集 靶机地址下载:https://download.vulnhub.com/serial/serial.zip 打开靶机,在kali虚拟机中进行主机存活探测 可以知道靶机ip地址为192.168.133.171 然后扫描端口 可以发现有一个22端口跟80端口 然后接下来用kali扫描它的目录 可以发现有一…...
【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?
<> 博客简介:Linux、rtos系统,arm、stm32等芯片,嵌入式高级工程师、面试官、架构师,日常技术干货、个人总结、职场经验分享 <> 公众号:嵌入式技术部落 <> 系列专栏:C/C、Linux、rt…...
com.microsoft.sqlserve r:sqljdbc4:jar:4.0 was not found in......如何解决?
这个错误提示说 com.microsoft.sqlserver:sqljdbc4:jar:4.0 这个依赖无法从 Maven 中央仓库(https://repo.maven.apache.org/maven2)下载,导致项目无法构建。以下是解决该问题的几种方法: 方法一:手动安装依赖 下载 J…...
数据集——鸢尾花介绍和使用
文章目录 一、鸢尾花数据集内容二、使用中常转换DataFrame 一、鸢尾花数据集内容 from sklearn import svm, datasets # 鸢尾花数据 iris datasets.load_iris() print(iris.data) X iris.data[:, :2] # 为便于绘图仅选择2个特征 y iris.target它包含了150个样本,…...
ElasticSearch第4篇(亿级中文数据量 ElasticSearch与Sphinx建索引速度、查询速度、并发性能、实测对比)
经过实测:1.09亿的数据量进行中文检索。ElasticSearch单机的检索性能在0.005~5.6秒之间,此检索速度可满足95%的业务场景(注意:每条ES文档平均65个汉字,数据源取自几千本小说,大部分文档在15~300个汉字之间&…...
过期知识:thinkphp5 使用migrate给现有的数据表新增表字段
个人开发网站记录, 这个文章主要是个以后健忘的我看的. 我在搞我的画笔审核 , 发现数据表的画笔数据在审核驳回的时候还是软删除好一些, 免得用户找不到之前上传的画笔数据, 后期也可以考虑重新显示给用户,让用户可以修改画笔信息重新提交审核. 这个时候想起了…...
前端和Postman调用同一个接口,拿到的数据不一样
1、表现 联调一个List接口,Postman自测得到的ID和前端调用得到的ID,结果不一样。前者结果: 后者结果: 同一份代码、同一个数据库,出现这种错误,大概率是类型转换时出问题了,但检查代码发现&…...
1000W长连接,如何建立和维护?千万用户IM 架构设计
1000W长连接,如何建立和维护?千万用户IM 架构设计 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的架构类/设计类…...
vulhub:Apache解析漏洞CVE-2017-15715
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个换行解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。 #启动靶机 cd /Vulnhub/vulhub-mast…...
开发中可能会面临的真实问题及处理流程
接口返回数据不符合预期 问题描述:接口返回的数据结构或字段名称与前端预期不符,导致页面展示错误。 处理流程: 检查接口文档:确保前后端约定的接口文档是最新的,并且描述一致。 前后端沟通:与后端开发人员…...
个性化你的生产力工具:待办事项App定制指南
国内外主流的10款待办事项软件对比:PingCode、Worktile、滴答清单、番茄ToDo、Teambition、Todoist、Microsoft To Do、TickTick、Any.do、Trello。 在寻找合适的待办事项软件时,你是否感到选择众多、难以决断?一个好的待办事项工具可以大大提…...
本地部署持续集成工具Jenkins并配置公网地址实现远程自动化构建
文章目录 前言1. 安装Jenkins2. 局域网访问Jenkins3. 安装 cpolar内网穿透软件4. 配置Jenkins公网访问地址5. 公网远程访问Jenkins6. 固定公网地址 前言 本文主要介绍如何在Linux CentOS 7中安装Jenkins并结合cpolar内网穿透工具实现远程访问管理本地部署的Jenkins服务. Jenk…...
【数据结构】了解哈希表,解决哈希冲突,用Java模拟实现哈希桶
哈希表的概念 哈希表(Hash Table)是一种高效的数据结构,用于实现快速的数据存储和检索。它通过将数据映射到一个数组的索引位置,从而能够在平均情况下实现O(1)的时间复杂度进行查找、插入和删除操作。 哈希表的基本概念包括以下…...
qt5 ui转python或C++文件
firstMainWin.ui转换成.py文件,输入以下命令即可 pyuic5 -o firstMainWin.py firstMainwin. ui python -m PyQt5.uic.pyuic Img_ui.ui -o Img_ui.py firstMainWin.ui转换成c文件,输入以下命令即可 uic firstMainWin.ui -o hello.h ##用python转 新建…...
scp命令详解
scp(secure copy)是一个基于 SSH 的命令行工具,用于在不同计算机之间安全地复制文件和目录。scp 提供了在本地和远程主机之间传输文件的简单方法,并且支持加密和认证,确保文件传输的安全性。 基本用法 从本地复制到远…...
算法小白的进阶之路(力扣1~5)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
昇思25天学习打卡营第22天|MindSporeK基于Diffusion扩散模型学习- Diffusion与其他生成模型
Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件,执行Python文件时,请…...
【C++版本】protobuf与gRPC
文章目录 一、Protobuf二、安装以及使用protoc三、gRPC1.Q&A2.学习版rpc3.gRPC压缩算法 参考 一、Protobuf Google Protocol Buffers(protobuf)是一种语言中立、平台中立的序列化协议,旨在高效地将结构化数据进行序列化和反序列化。它主要…...
要抓住国际白银现货行情 以下这几点需要注意
国际白银现货行情最近表现不甚稳定,在七月上旬出现了比较强势的上涨,但随后出现强势的下跌,跌破了30关口。如果我们要抓住国际白银现货行情,那么以下这几点我们就需要注意。 一,建立交易计划,并且按计划执行…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
