MySQL数据库07——高级条件查询
前面一章介绍了基础的一个条件的查询,如果多条件,涉及到逻辑运算,and or 之类的。就是高级一点的条件查询。本章来介绍复杂的条件搜索表达式。
AND运算符
AND运算符只有当两边操作数均为True时,最后结果才为True。人们使用AND描述“与”(而且)的关系,即当满足第一个条件而且还要满足第二个条件时才会通过审核。看下面的几个例题子。
组合两个条件,这两个条件是“而且”的关系,使用AND运算符连接。
student表中,查询1997年出生的所有女生,并将结果按出生日期升序排序。运行环境为MySQL。
SELECT *
FROM student
WHERE birthday>='1997/01/01'
AND birthday<'1998/01/01'
AND sex='女'
ORDER BY birthday

OR运算符
OR运算符只有当两边操作数均为False时,最后结果才为False,只要一边是True则最后结果为True。根据OR的这种运算规则,人们使用OR描述“或”(或者)的关系,即当满足任何一个条件就可以通过审核。
从student表中,查询中文系的所有学生和外语系的所有学生,并将结果按学号升序排序。
分析:两个条件的关系其实是“或”,因为满足任何一个条件就可以通过审核。
SELECT * FROM student
WHERE institute='中文系' OR institute='外语系'
ORDER BY ID;

AND和OR混合
WHERE子句中可以包含任意数量的AND和OR运算符,并且允许两者结合使用。下面的例题,组合了AND和OR两个运算符,解决了一个查询任务。
从student表中,查询中文系和外语系的所有女生。
分析:前面已经介绍了查询中文系和外语系的学生,需要使用OR运算符,又因为要查询这两个系的女生,所以还得需要AND运算符。编写如下SELECT语句。
SELECT *
FROM student
WHERE institute='中文系'
OR institute='外语系'
AND sex='女'
ORDER BY ID;

这样会进去了一个男生。因为优先执行了AND,然后才是OR。所以要改为下面的:
SELECT *
FROM student
WHERE (institute='中文系' OR institute='外语系')
AND sex='女'
ORDER BY ID;

才是对的。
IN运算符
从course表中,查询学分为2、3、4的课程的信息,并按学分降序,课号升序排序。
SELECT * FROM course
WHERE credit IN (2,3,4)
ORDER BY credit DESC, ID;

从student表中,查询中文系、外语系和计科系的所有学生,并按院系降序排列。
SELECT * FROM student
WHERE institute IN ('中文系','外语系','计科系')
ORDER BY CONVERT(institute USING GBK) DESC;

反in运算 NOT IN。
从student表中,查询除中文系、外语系和计算机系以外的,其它系的学生,并按院系降序排列。
SELECT * FROM student
WHERE institute NOT IN ('中文系','外语系','计科系')
ORDER BY CONVERT(institute USING GBK) DESC;

从score表中,查询所有学生的“心理学”的考试成绩和平时成绩,并按考试成绩降序排列,当考试成绩相同时按平时成绩降序排列。
分析:因为Score表中没有课名只有课号,因此,必须从Course表中找到“心理学”的课号,然后根据这一课号,从Score表中查询考试成绩和平时成绩。
SELECT s_id AS 学号, result1 AS 考试成绩, result2 AS 平时成绩 FROM score
WHERE c_id IN (SELECT ID FROM course WHERE course='心理学')
ORDER BY result1 DESC, result2 DESC; 
in 后面的子句代表筛选出心理学这个课程的ID。相当于是嵌套语句。
NOT运算符
NOT运算符的作用是对其后的表达式求反。
下面介绍NOT运算符的使用方法。从student表中,查询来源地不是北京和广东的所有学生。
SELECT * FROM student
WHERE NOT (origin='北京市' OR origin='广东省');

从student表中,查询出生日期不在1997~1998之间(包含1997和1998)的所有学生。
SELECT * FROM student
WHERE birthday NOT BETWEEN '1997/01/01' AND '1998/12/31'

模糊查询
类似于正则表达式,比如只知道学生名字里面含有‘三’,要去查询。此时要用上通配符。
结合使用LIKE运算符和通配符可以对表进行模糊查询,即仅仅使用查询内容的一部分查询数据库中存储的数据。当然LIKE运算符也可以单独使用,单独使用时,其功能与等于运算符(=)相同。不过,需要注意的是LIKE运算符只支持字符型数据。
从student表中,查询中文系所有学生的信息,并按学号升序排序。
SELECT * FROM student
WHERE institute LIKE '中文系'
ORDER BY ID;
LIKE改成=号也一样的效果。
但是后面用上通配符就不一样了。
通配符“%”
在SQL语言中,使用百分号(%)通配符代表0个或多个字符。下面的表7.1中,列出了几个典型的例子供读者参考。
| 百分号(%)通配符举例 | 说明 | 匹配字符串举例 |
| a% | 代表头字母为“a”的所有字符串 | “a”、“abc”、“amer mend uu?”等 |
| %NBA% | 代表含有“NBA”的所有字符串 | “NBA 篮球明星”、“进入NBA的姚明”、“巴特尔与NBA”等 |
| %nm | 代表最后两个字母为“nm”的所有字符串 | “nm”、“123nm” |
| A%Z | 代表头字母为“A”,最后一个字母为“Z”的所有字符串 | “AZ”、“ABCDZ”、“A1212DFAFZ”等 |
| %1983% | 代表含有1983的字符串或者日期时间型数据 | “生于1983年”、03/20/1983 |
示例演示
首先插入两条数据方面演示:
INSERT INTO student(ID,name,sex,birthday)
VALUES('0011','周三丰','男','1999/12/20'),('0012','三宝','男','1998/05/15');
从student表中,查询所有姓名中包含“三”字的学生信息。
SELECT * FROM student WHERE name LIKE '%三%';

如果将“%三%”中的第一个“%”去掉,则查询结果会是什么呢?
SELECT * FROM student WHERE name LIKE '三%';

如果将“%三%”中的最后一个“%”去掉,则查询结果会是什么呢?
SELECT * FROM student WHERE name LIKE '%三';

使用“%”通配符查询日期型数据
使用“%”通配符查询日期时间型数据会很方便,例如,查询1983年出生的所有学生,查询9月份出生的所有学生等。下面通过几个例题介绍查询日期时间型数据的具体方法。
从student表中,查询出生于1998年的所有学生。
SELECT * FROM student WHERE birthday LIKE '%1998%';

从student表中,查询出生于9月份的所有学生。
SELECT * FROM student WHERE birthday LIKE '%-09-%';

在MySQL环境下,从student表中,查询1997年9月份出生的所有学生。
SELECT * FROM student WHERE birthday LIKE '1997%09%';

“_”通配符
%”通配符可以代表0个或多个字符,但是它不能代表指定个数的字符。
例如,需要查询姓“周”,且名字由两个字组成的所有学生。如果使用“%”,则只能查询所有姓“周”的学生,而并不能确定名字只有两个字。而‘周_’就表示只有两个字
SELECT * FROM student WHERE name LIKE '周_';

如果是两个__,那么就会查询出张三丰。
从student表中,查询名字最多由两个字组成的所有学生。
SELECT * FROM student WHERE name LIKE '__';
注意:LIKE后有两个“_”通配符。 注意: “_”通配符也可以不与字符组合,而单独使用

正则表达式
在WHERE子句的条件中,还可以使用正则表达式,不同数据库环境中使用正则表达式的方式不同:
在SQL环境下,可以直接用中插号“[]”括起来放在LIKE后面的条件表达式中即可。而MySQL则需要使用关键字REGEXP、Oracle则需要使用REGEXP_LIKE正则表达式函数实现
| 举例 | 说明 |
| [NR]% | 代表以 “N”或“R” 字母开头的所有字符串 |
| [a-d]%ing | 代表以“a”、“b”、“c”、“d”字母开头,以“ing”结尾的所有字符串 |
| [c-emn]% | 代表以“c”、“d”、“e”、“m”和“n”字母开头的所有字符串 |
| N[^B]% | 代表以 “N”字母开头,并且第二个字母不是“B”的所有字符串 |
| %197[5-9]% | 代表1975~1979 等五个数字 |
| [1][012]% | 代表10、11、12等三个数字 |
例如从student表中,查询姓张、李或周的所有学生,并按姓名升序排序。
在MySQL环境中,执行以下语句
SELECT * FROM student
WHERE name REGEXP '^[张李周]'
ORDER BY CONVERT(name USING GBK);

从student表中,查询名字里面不含有三六七的所有学生,并按姓名降序排序。
在MySQL环境中,执行以下语句:
SELECT * FROM student
WHERE name NOT REGEXP '[三七六]'
ORDER BY CONVERT(name USING GBK) DESC;

转义字符‘\’
如果运行环境为MySQL或Oracle时,则使用反斜杠(\)作为转义字符。仍旧要查询最后两个字符为百分之五(5%)的所有字符串,在Oracle中,编写其LIKE语句为:
LIKE '%5\%'
此时,需要注意,反斜杠作为转义字符时应当先将其激活。激活的方法为在SQL Plus中使用如下命令。
set escape \ ;
定义了转义字符后,再看一个例子,例如,要查询所有包含“SQBT_999”的字符串,则其LIKE语句为:
LIKE '%SQBT\_999%'
相关文章:
MySQL数据库07——高级条件查询
前面一章介绍了基础的一个条件的查询,如果多条件,涉及到逻辑运算,and or 之类的。就是高级一点的条件查询。本章来介绍复杂的条件搜索表达式。 AND运算符 AND运算符只有当两边操作数均为True时,最后结果才为True。人们使用AND描述…...
《Terraform 101 从入门到实践》 第四章 States状态管理
《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。 军书十二卷,卷卷有爷名。 为什么需要状态管理 Terraform的主要作用是管理云平台上的资源ÿ…...
数据结构之二叉树
🎈一.二叉树相关概念 1.树 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合,树结构通常用来存储逻辑关系为 "一对多" 的数据。例如: 关于树的几个重要概念&…...
上海亚商投顾:三大指数集体调整 消费板块逆市活跃
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪三大指数今日集体调整,沪指全天弱势震荡,创业板指盘中跌超1%。旅游、食品、乳业等大消费板块…...
【2023unity游戏制作-mango的冒险】-开始画面API制作
👨💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:游戏制作 ⭐mango的冒险-开始画面制作⭐ 文章目录⭐mango的冒险-开始画面制作⭐👨&…...
【微服务】Nacos配置管理
🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 Nacos除了可以做配置管理,同样可以当作注册中心来使用。 了解注册中心用法点击跳转👉【微服务】Nacos注册中心 一.引入 当微服务部署的实例越来越多࿰…...
【C++】类与对象理解和学习(上)
专栏放在【C知识总结】,会持续更新,期待支持🌹类是什么?类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它(实例化后才…...
Pyqt5小案例,界面与逻辑分离的小计算器程序
直接看下最终效果: 使用技术总结 使用Designer设计界面 使用pyuic5命令导出到python文件 新建逻辑处理文件,继承pyuic5导出的文件的类,在里面编写信号与槽的处理逻辑 使用Designer设计界面 要使用Designer,安装一个Python库即…...
leaflet加载KML文件,显示图形(方法2)
第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载KML文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共66…...
Mysql 部署 MGR 集群
0. 参考文章 官方文档: MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started 博客: MGR 单主模式部署教程(基于 MySQL 8.0.28) - 墨天轮 (modb.pro) mysql MGR单主模式的搭建 - 墨天轮 (modb.pro) MySQL 5.7 基于…...
迁移至其他美国主机商时需要考虑的因素
网站的可访问性是关系业务的关键因素之一。一个稳定、快速且优化良好的主机上的网站更有可能享受不间断的流量,并在谷歌的SERP中获得更好的排名。因此,在构建企业网站时,选择合适的主机商相当重要。不过就以美国主机为例,由于每个…...
【数据结构】第二章 线性表
文章目录第二章 知识体系2.1 线性表的定义和基本操作2.1.1 线性表的定义2.1.2 线性表的基本操作2.2 线性表的顺序表示2.2.1 顺序表的定义2.2.2 顺序表的基本操作的实现2.3 线性表的链式表示2.3.1 单链表的定义2.3.2 单链表的基本操作实现2.3.3 双链表2.3.4 循环链表2.3.5 静态链…...
RESTful API 为何成为顶流 API 架构风格?
作者孙毅,API7.ai 技术工程师,Apache APISIX Committer 万物互联的世界充满着各式各样的 API ,如何统筹规范 API 至关重要。RESTful API 是目前世界上最流行的 API 架构风格之一,它可以帮助你实现客户端与服务端关注点分离&#x…...
Python基础知识点汇总(列表)
列表的含义 列表由一系列按特定顺序排列的元素组成,是Python中内置的可变序列。 **注:**列表的所有元素放在中括号[]中,相邻的两个元素用逗号分隔; 可将整数、实数、字符串、列表、元组等任何类型的内容放到列表中,且同一列表的元素类型可以不同。 列表的创建和删除 1.…...
新的一年软件测试行业的趋势能够更好?
如果说,2022年对于全世界来说,都是一场极大的挑战的话;那么,2023年绝对是机遇多多的一年。众所周知,随着疫情在全球范围内逐步得到控制,无论是国际还是国内的环境,都会呈现逐步回升的趋势&#…...
Threejs中的Shadow Mapping(阴影贴图)
简而言之,步骤如下: 1.从灯光位置视点(阴影相机)创建深度图。 2.从相机的位置角度进行屏幕渲染,在每个像素点,比较由阴影相机的MVP矩阵计算的深度值和深度图的值的大小,如果深度图值小的话&…...
本质安全设备标准(IEC60079-11)的理解(四)
本质安全设备标准(IEC60079-11)的理解(四) 对于标准中“Separation”的理解 IEC60079-11使用了较长的篇幅来说明设计中需要考虑到的各种间距, 这也从一定程度上说明了间距比较重要,在设计中是需要认真考虑…...
(record)QEMU安装最小linux系统——TinyCore(命令行版)
文章目录QEMU安装最小linux系统——TinyCore参考QEMU使用qemu创建tinycore虚拟机再次启动文件保存QEMU安装最小linux系统——TinyCore 简单记录安装过程和记录点 参考 [原创] qemu 与 Tiny Core tinycore的探索 QEMU qemu不多介绍,这里是在WSL2上安装的linux版…...
C++中的cast类型转换
reinterpret_cast用法:reinpreter_cast<type-id> (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。这个操作符能够在非相关的类型之间转换。操作结果…...
西瓜数据集读取的详细解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...
AI 驱动多态钓鱼攻击机理与行为防御体系研究
摘要 生成式 AI 技术推动网络钓鱼从规模化群发转向实时动态变异的多态化攻击模式,以每 15–20 秒生成唯一邮件、链接与附件,彻底颠覆基于重复特征与静态规则的传统防御逻辑。Cofense 2025 年威胁数据显示,76% 的恶意 URL 具备唯一性、82% 的恶…...
Azure VM SSH被锁死?别慌,用Serial Console这招救活你的服务器(亲测有效)
Azure VM SSH被锁死?Serial Console终极救援指南 当你在Azure VM上误操作sshd_config导致SSH被完全锁死时,那种绝望感就像被困在数字孤岛。常规的RDP、Bastion甚至重建VM都无济于事——直到发现Serial Console这个隐藏的救命通道。作为经历过同样噩梦的运…...
OpalServe:构建团队AI工具统一控制平面,实现MCP服务器集中治理
1. 项目概述:为团队AI工具构建统一控制平面如果你和你的团队正在使用Claude Desktop、Cursor、Windsurf这类支持MCP(Model Context Protocol)的AI编程工具,那么下面这个场景你一定不陌生:每个开发者都需要在自己的机器…...
C# Winform高效分页实践:SunnyUI uiPagination控件详解与数据绑定
1. 初识SunnyUI uiPagination控件 第一次接触SunnyUI的uiPagination控件是在开发一个订单管理系统时。当时客户抱怨系统加载5000多条记录时会卡顿近10秒,我试过各种传统分页方案都不够理想,直到发现了这个宝藏控件。它就像Winform界的"瑞士军刀&quo…...
OBS Source Record插件深度解析:5个实战技巧实现多源独立录制
OBS Source Record插件深度解析:5个实战技巧实现多源独立录制 【免费下载链接】obs-source-record 项目地址: https://gitcode.com/gh_mirrors/ob/obs-source-record 你是否曾经在直播或视频制作中,想要单独录制某个摄像头画面、游戏窗口或浏览器…...
Taotoken模型广场在项目技术选型阶段提供的便利性体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken模型广场在项目技术选型阶段提供的便利性体验 启动一个新的AI项目时,技术决策者面临的首要挑战往往是模型选型…...
欧洲千亿欧元纳米电子战略:产业政策、研发投入与市场拉动的博弈
1. 项目概述:一场关于欧洲纳米电子未来的千亿欧元豪赌2012年底,当欧洲大部分地区仍在应对欧债危机的余波时,一份名为《欧洲未来的创新:2020年后的纳米电子技术》的定位文件,在产业界投下了一颗重磅炸弹。这份由欧洲两大…...
SolidWorks 2021建模技巧:用‘拉伸切除’和‘多轮廓草图’高效搞定PCB屏蔽腔设计
SolidWorks 2021建模效率革命:多轮廓草图与拉伸切除在PCB屏蔽设计中的高阶应用 当你在设计一块需要严格电磁屏蔽的PCB时,那些看似简单的腔体结构往往会成为消耗你大量时间的"黑洞"。传统的单轮廓草图拉伸方式不仅操作繁琐,更会在后…...
AI时代计算机教育变革:从代码生成到系统设计的教学重构
1. 项目概述:当AI走进计算机课堂,我们面临的真实图景作为一名在计算机教育一线摸爬滚打了十几年的从业者,我亲眼见证了从粉笔黑板到多媒体教室,再到如今云端协作的变迁。但最近两年,以ChatGPT、GitHub Copilot为代表的…...
边缘部署模式:在边缘位置部署应用
边缘部署模式:在边缘位置部署应用 一、边缘部署概述 1.1 边缘部署的定义 边缘部署是指将应用或服务部署在靠近用户或数据源的边缘位置,以减少延迟、提高性能、降低带宽消耗并增强数据隐私保护。 1.2 边缘部署的价值 低延迟:减少数据传输延迟高…...
