MySQL 运算符详解:逻辑、位运算与正则表达式应用

在 MySQL 中,运算符是构建复杂查询条件的基础。除了基础的算术和比较运算符,逻辑运算符、位运算符以及正则表达式的灵活运用,能让数据筛选更加精准高效。本文将系统讲解这些运算符的用法、规则及实战技巧,帮助你掌握复杂查询的核心技能。

一、逻辑运算符:多条件组合的核心

逻辑运算符用于组合多个条件,判断表达式的真假,返回结果为1(真)、0(假)或NULL(未知)。常用的有四种:

1. 逻辑非(NOT / !)

作用:对条件结果取反

语法:NOT 条件 或 ! 条件

规则

  • 条件为0(假)时返回1;

  • 条件为非0(真)时返回0;

  • 条件为NULL时返回NULL。

示例

-- 查询薪资不在9000-12000之间的员工
SELECT employee_id, salary 
FROM employees 
WHERE NOT (salary >= 9000 AND salary <= 12000);

2. 逻辑与(AND / &&)

作用:所有条件同时为真时返回1

语法:条件1 AND 条件2 或 条件1 && 条件2

规则

  • 所有条件非0且非NULL时返回1;

  • 任意条件为0时返回0;

  • 存在NULL且无0时返回NULL。

示例

-- 查询部门30中薪资>5000的员工
SELECT last_name, salary 
FROM employees 
WHERE department_id = 30 AND salary > 5000;

3. 逻辑或(OR / ||)

作用:任意条件为真时返回1

语法:条件1 OR 条件2 或 条件1 || 条件2

规则

  • 任意条件非0时返回1;

  • 所有条件为0时返回0;

  • 存在NULL且无真条件时返回NULL。

注意:AND优先级高于OR,建议用括号明确逻辑

示例

-- 正确:查询薪资>10000 或 (岗位含MAN且薪资>5000)的员工
SELECT last_name, job_id, salary 
FROM employees 
WHERE salary > 10000 OR (job_id LIKE '%MAN%' AND salary > 5000);

4. 逻辑异或(XOR)

作用:两个条件一真一假时返回1(“异” 即不同)

语法:条件1 XOR 条件2

规则

  • 一真一假(非0和0)时返回1;

  • 同真或同假时返回0;

  • 任意条件为NULL时返回NULL。

示例

-- 查询部门为10/20 或 薪资>8000,但不同时满足的员工
SELECT last_name, department_id, salary 
FROM employees 
WHERE department_id IN (10, 20) XOR salary > 8000;

二、位运算符:二进制层面的运算

位运算符直接对数值的二进制位进行操作,适用于底层数据处理(如权限控制)。运算时先将数值转为二进制,计算后再转回十进制。

运算符名称作用说明示例(6→110,3→011)
&按位与对应位都为 1 则返回 1,否则 06 & 3 = 2(110 & 011=010)
||按位或对应位有一个为 1 则返回 1,否则 0
^按位异或对应位不同则返回 1,相同则 06 ^ 3 = 5(110 ^ 011=101)
~按位取反0→1,1→0(结果为原数的补码)~6 = -7(补码运算)
>>按位右移二进制位右移指定位数,高位补 06 >> 1 = 3(110→11)
<<按位左移二进制位左移指定位数,低位补 06 << 1 = 12(110→1100)

示例

-- 判断权限位是否包含某角色(假设8对应二进制1000,代表管理员权限)
SELECT user_id, role_bits 
FROM users 
WHERE (role_bits & 8) = 8;  -- 结果为8表示包含管理员权限

三、运算符优先级:避免逻辑混乱

运算符优先级决定计算顺序,优先级高的先执行。记不清时,用括号**()**强制指定顺序(推荐)。

优先级从高到低(核心)

  1. 括号()(最高)

  2. 位运算符(~、<<、>>、&、^、|)

  3. 算术运算符(*、/、% 高于 +、-)

  4. 比较运算符(=、>、BETWEEN、IN等)

  5. 逻辑运算符(NOT > AND > OR、XOR)

  6. 赋值运算符(=,最低)

示例

-- 错误:因AND优先级高,可能不符合预期
SELECT * FROM employees WHERE salary>5000 OR salary<3000 AND department_id=30;-- 正确:用括号明确先算OR的两边
SELECT * FROM employees WHERE (salary>5000 OR salary<3000) AND department_id=30;

四、正则表达式:复杂字符串匹配

REGEXP支持灵活的字符串模式匹配,比LIKE更适合复杂场景。常用匹配规则如下:

模式符号作用示例
^匹配开头‘^b’ 匹配以 b 开头的字符串
$匹配结尾‘y$’ 匹配以 y 结尾的字符串
.匹配任意单个字符‘a.g’ 匹配 a 和 g 之间有一个任意字符
*匹配前面字符 0 次或多次‘ba*’ 匹配 b 后接 0 个或多个 a(b、ba 等)
+匹配前面字符至少 1 次‘ba+’ 匹配 b 后接 1 个或多个 a(ba、baa)
``匹配多个选项之一
[]匹配括号内任意单个字符‘[ot]’ 匹配 o 或 t
[^]匹配括号外任意字符‘[^0-9]’ 匹配非数字字符
{n,}匹配前面字符至少 n 次‘x{2,}’ 匹配 x 至少出现 2 次
{n,m}匹配前面字符 n 到 m 次‘ba{1,3}’ 匹配 ba、baa、baaa

示例

-- 1. 匹配以b开头且后面有至少1个a的字符串
SELECT f_name FROM fruits WHERE f_name REGEXP '^ba+';-- 2. 匹配包含on或ap的字符串
SELECT f_name FROM fruits WHERE f_name REGEXP 'on|ap';-- 3. 匹配x连续出现至少2次的字符串
SELECT f_name FROM fruits WHERE f_name REGEXP 'x{2,}';

与 LIKE 的区别

  • REGEXP匹配字符串中任意位置的模式(如’bon’ REGEXP 'on’返回 1);

  • LIKE需用通配符才能匹配中间内容(如’bon’ LIKE '%on%'才返回 1)。

五、总结:核心要点速览

  1. 逻辑运算符
    • NOT取反,AND需全真,OR需一真,XOR需一真一假;
    • 注意AND优先级高于OR,用括号明确逻辑。
  1. 位运算符
    • 对二进制位操作,适用于权限控制等底层场景;
    • 常用&(判断位是否为 1)、<</>>(移位运算)。
  1. 优先级
    • 括号最高,赋值最低;不确定时用括号强制顺序。
  1. 正则表达式
    • REGEXP支持复杂模式匹配,灵活度远超LIKE;
    • 掌握^/$/[]/{}等符号,可应对多数字符串筛选需求。

熟练运用这些运算符,能让你在处理多条件查询和复杂字符串匹配时更加得心应手,写出高效、精准的 SQL 语句。

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

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

相关文章

<数据集>遥感飞机识别数据集<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/91702190数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3842张 标注数量(xml文件个数)&#xff1a;3842 标注数量(txt文件个数)&#xff1a;3842 标注类别数&#xff1a;20 标注类别名称&#xf…

Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南

目录Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南前言第一部分&#xff1a;安装前准备1.1 系统要求检查1.2 下载安装包1.3 验证安装包完整性第二部分&#xff1a;安装KingbaseES2.1 启动安装程序2.2 接受许可协议2.3 选择授权文件2.4 设置安装目录2.5 选择安装…

Git+Jenkins 基本使用

一、什么是 JenkinsJenkins 是一个功能强大的应用程序&#xff0c;允许持续集成和持续交付项目&#xff08;持续部署&#xff09;&#xff0c;无论用的是什么平台。这是一个免费的源代码&#xff0c;可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署技术…

Linux第十三讲:线程同步和互斥

Linux第十三讲&#xff1a;线程同步和互斥1.线程互斥1.1进程线程间的互斥背景概念1.2什么是锁1.2.1认识锁&#xff0c;理解锁2.线程同步2.1条件变量2.2生产和消费模型2.3基于阻塞队列(blockqueue)的生产消费模型2.3.1单生产&#xff0c;单消费的阻塞队列模拟实现2.3.2多生产&am…

SAP 简单的AMDP demo 练习使用

SAP AMDP&#xff08;ABAP Managed Database Procedure&#xff09;是SAP的一项先进技术&#xff0c;用于在SAP HANA数据库上执行高性能的数据库操作。它允许ABAP开发人员编写数据库过程&#xff0c;这些过程可以在数据库级别上执行&#xff0c;从而实现更快的数据处理和更高的…

Maven JAR Plugin 插件使用说明

Maven JAR Plugin 插件使用说明1 Maven JAR Plugin 插件地址2 Maven JAR Plugin 特点3 maven-assembly-plugin 的用法3.1 无依赖项 maven-jar-plugin 配置3.2 有依赖项 maven-jar-plugin 配置3.3 配合maven-dependency-plugin 将依赖复制到指定位置1 Maven JAR Plugin 插件地址…

QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测

QTYolov8 实例分割、目标检测推理。QT源码。 程序准备/版本:QT creator QT6.8 编译器:MSVC2022 opencv:4.7 onnxruntime:1.16.0 cpu版本 QTyolo推理部署程序部分源码: #include "aitoolinterface.h" #include "ui_aitoolinterface.h" #include <QDebu…

【java实现一个接口多个实现类通用策略模式】

java实现同个接口多个实现类通用策略模式 项目业务中&#xff0c;有多个平台&#xff0c;多个平台直接有相同的业务&#xff0c;只有一个接口入口&#xff0c;但是 不同的平台入口&#xff0c;虽然接口相同&#xff0c;参数相同&#xff0c;但是各自的具体实现不同&#xff0c;…

leetcode-139. 单词拆分-C

暴力回溯回溯过程就是一个决策树模型&#xff0c;从所有选择中找到合适的继续&#xff0c;否则回到上一级继续。该方法思路简单&#xff0c;时间复杂度过高&#xff0c;大概1/4的用例超时。 bool backtrack(char *s, int cur, char** wordDict, int wordDictSize) {// 基线条件…

《彩色终端》诗解——ANSI 艺术解码(DeepSeek)

AIi诗解通吾灵&#xff0c;直抄原文享分玲。 笔记模板由python脚本于2025-08-18 23:35:59创建&#xff0c;本篇笔记适合喜欢诗&代码的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Python官网…

抓包工具tcpdump详细指南

目录 1. 核心功能与特性 2. 关键参数速查表 3. 基础命令 3.1 协议/端口过滤 3.2 IP 地址过滤 3.3 高级逻辑组合 3.4 控制输出详细度 3.5 解析包内容 3.6 特殊包过滤 3.7 限制抓包数量 3.8 过滤特定大小包 3.9 过滤提升性能 ​​​​​​3.10 多网卡绑定 3.11 高级…

三高架构杂谈

我们的秒杀请求到了tomcat之后&#xff0c;我整个请求到了后端&#xff0c;我们怎么抗住高并发 也就是让他1s抗住10w的订单量&#xff0c;该怎么做 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>…

后端通用基础代码

后端通用基础代码 通用基础代码是指&#xff1a;“无论在任何后端项目中&#xff0c;都可以复用的代码。这种代码一般 “一辈子只用写一次” &#xff0c;了解作用之后复制粘贴即可&#xff0c;无需记忆。 目录结构如下&#xff1a;1、自定义异常 自定义错误码&#xff0c;对错…

基于51单片机WIFI心率计脉搏体温测量仪APP设计

1 系统功能介绍 本设计基于 STC89C52 单片机&#xff0c;结合 脉搏传感器、温度传感器 DS18B20、LCD1602 液晶显示器、WiFi 模块 等外设&#xff0c;构建了一个 WiFi 心率计脉搏体温测量仪 APP 系统。系统能够实现对人体心率与体温的实时采集、处理、显示和远程上传&#xff0c…

从零到一构建企业级GraphRAG系统:GraphRag.Net深度技术解析

当RAG遇上知识图谱&#xff0c;会碰撞出怎样的火花&#xff1f;本文将带你深入探索GraphRag.Net这个开源项目&#xff0c;看看如何用.NET技术栈打造一个企业级的图谱增强检索系统。 引言&#xff1a;为什么我们需要GraphRAG&#xff1f; 在AI大模型时代&#xff0c;RAG&#x…

前端Element-plus的选择器 el-select 清空内容时,后端对应的更新方式,支持更新为null

1、所属小类选择器 el-select 清空内容时&#xff0c;前端通过事件设置为空字符串clear"handleSmallCategoryClear"【所属小类选择器】只能选择&#xff0c;不能输入信息<script setup lang"ts" name"QualityFileInfoDialog"> ...... // 所…

【笔记】和各大AI大语言模型合作写项目—slirp.go

最近和各大AI大语言模型一起合作写了个小项目&#xff0c;让大家看看AI离取代人类还差多远。 开发大家都在一个共享环境下&#xff0c;连docker都不能运行&#xff0c;rootless也没有。不过好在linux环境&#xff0c;弄个proot能apt或者yum install自由&#xff0c;但是诸如pod…

国标:开展环境卫生满意度调查

随着社会的进步和人们生活水平的提高&#xff0c;&#xff08;满意度调查&#xff09;&#xff08;问卷调查&#xff09;&#xff08;第三方市场咨询公司&#xff09;对生活品质的追求以及对环境保护的重视已经成为了当下社会的主旋律。在这样的背景下&#xff0c;环境卫生问题…

【办公类-54-08】20250902 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)根据新Excel模版,标题增加园区、空姓名行填充灰色

背景需求: 之前做了优化过的点名册 【办公类-54-07】20250901 2025学年第一学期班级点名册模版(双休国定假涂成灰色、修改标题和页眉,批量导出PDF)-CSDN博客文章浏览阅读984次,点赞27次,收藏29次。【办公类-54-07】20250901 202学年第一学期班级点名册模版(双休国定假…

【C++知识杂记1】智能指针及其分类

智能指针&#xff08;smart pointer&#xff09; 是 C11 引入的一类 模板类&#xff0c;用来封装原始指针&#xff0c;自动管理堆内存的生命周期&#xff0c;避免出现 内存泄漏 和 悬空指针&#xff08;野指针&#xff09; 的问题。 当智能指针对象离开作用域时&#xff0c;它会…