当前位置: 首页 > news >正文

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;

 

IN运算符最大优点是:其后条件列表集合中,可以放置其它SELECT语句,即子查询。下面通过一个例子演示这些优点。

从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]%

代表19751979 等五个数字

[1][012]%

代表101112等三个数字

例如从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——高级条件查询

前面一章介绍了基础的一个条件的查询&#xff0c;如果多条件&#xff0c;涉及到逻辑运算&#xff0c;and or 之类的。就是高级一点的条件查询。本章来介绍复杂的条件搜索表达式。 AND运算符 AND运算符只有当两边操作数均为True时&#xff0c;最后结果才为True。人们使用AND描述…...

《Terraform 101 从入门到实践》 第四章 States状态管理

《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新&#xff0c;书中的示例代码也是放在GitHub上&#xff0c;方便大家参考查看。 军书十二卷&#xff0c;卷卷有爷名。 为什么需要状态管理 Terraform的主要作用是管理云平台上的资源&#xff…...

数据结构之二叉树

&#x1f388;一.二叉树相关概念 1.树 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合&#xff0c;树结构通常用来存储逻辑关系为 "一对多" 的数据。例如&#xff1a; 关于树的几个重要概念&…...

上海亚商投顾:三大指数集体调整 消费板块逆市活跃

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪三大指数今日集体调整&#xff0c;沪指全天弱势震荡&#xff0c;创业板指盘中跌超1%。旅游、食品、乳业等大消费板块…...

【2023unity游戏制作-mango的冒险】-开始画面API制作

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;游戏制作 ⭐mango的冒险-开始画面制作⭐ 文章目录⭐mango的冒险-开始画面制作⭐&#x1f468;‍&…...

【微服务】Nacos配置管理

&#x1f6a9;本文已收录至专栏&#xff1a;微服务探索之旅 &#x1f44d;希望您能有所收获 Nacos除了可以做配置管理&#xff0c;同样可以当作注册中心来使用。 了解注册中心用法点击跳转&#x1f449;【微服务】Nacos注册中心 一.引入 当微服务部署的实例越来越多&#xff0…...

【C++】类与对象理解和学习(上)

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;类是什么&#xff1f;类是对对象进行描述的&#xff0c;是一个模型一样的东西&#xff0c;限定了类有哪些成员&#xff0c;定义出一个类并没有分配实际的内存空间来存储它&#xff08;实例化后才…...

Pyqt5小案例,界面与逻辑分离的小计算器程序

直接看下最终效果&#xff1a; 使用技术总结 使用Designer设计界面 使用pyuic5命令导出到python文件 新建逻辑处理文件&#xff0c;继承pyuic5导出的文件的类&#xff0c;在里面编写信号与槽的处理逻辑 使用Designer设计界面 要使用Designer&#xff0c;安装一个Python库即…...

leaflet加载KML文件,显示图形(方法2)

第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载KML文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共66…...

Mysql 部署 MGR 集群

0. 参考文章 官方文档&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started 博客&#xff1a; MGR 单主模式部署教程&#xff08;基于 MySQL 8.0.28&#xff09; - 墨天轮 (modb.pro) mysql MGR单主模式的搭建 - 墨天轮 (modb.pro) MySQL 5.7 基于…...

迁移至其他美国主机商时需要考虑的因素

网站的可访问性是关系业务的关键因素之一。一个稳定、快速且优化良好的主机上的网站更有可能享受不间断的流量&#xff0c;并在谷歌的SERP中获得更好的排名。因此&#xff0c;在构建企业网站时&#xff0c;选择合适的主机商相当重要。不过就以美国主机为例&#xff0c;由于每个…...

【数据结构】第二章 线性表

文章目录第二章 知识体系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 架构风格?

作者孙毅&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Committer 万物互联的世界充满着各式各样的 API &#xff0c;如何统筹规范 API 至关重要。RESTful API 是目前世界上最流行的 API 架构风格之一&#xff0c;它可以帮助你实现客户端与服务端关注点分离&#x…...

Python基础知识点汇总(列表)

列表的含义 列表由一系列按特定顺序排列的元素组成,是Python中内置的可变序列。 **注:**列表的所有元素放在中括号[]中,相邻的两个元素用逗号分隔; 可将整数、实数、字符串、列表、元组等任何类型的内容放到列表中,且同一列表的元素类型可以不同。 列表的创建和删除 1.…...

新的一年软件测试行业的趋势能够更好?

如果说&#xff0c;2022年对于全世界来说&#xff0c;都是一场极大的挑战的话&#xff1b;那么&#xff0c;2023年绝对是机遇多多的一年。众所周知&#xff0c;随着疫情在全球范围内逐步得到控制&#xff0c;无论是国际还是国内的环境&#xff0c;都会呈现逐步回升的趋势&#…...

Threejs中的Shadow Mapping(阴影贴图)

简而言之&#xff0c;步骤如下&#xff1a; 1.从灯光位置视点&#xff08;阴影相机&#xff09;创建深度图。 2.从相机的位置角度进行屏幕渲染&#xff0c;在每个像素点&#xff0c;比较由阴影相机的MVP矩阵计算的深度值和深度图的值的大小&#xff0c;如果深度图值小的话&…...

本质安全设备标准(IEC60079-11)的理解(四)

本质安全设备标准&#xff08;IEC60079-11&#xff09;的理解&#xff08;四&#xff09; 对于标准中“Separation”的理解 IEC60079-11使用了较长的篇幅来说明设计中需要考虑到的各种间距&#xff0c; 这也从一定程度上说明了间距比较重要&#xff0c;在设计中是需要认真考虑…...

(record)QEMU安装最小linux系统——TinyCore(命令行版)

文章目录QEMU安装最小linux系统——TinyCore参考QEMU使用qemu创建tinycore虚拟机再次启动文件保存QEMU安装最小linux系统——TinyCore 简单记录安装过程和记录点 参考 [原创] qemu 与 Tiny Core tinycore的探索 QEMU qemu不多介绍&#xff0c;这里是在WSL2上安装的linux版…...

C++中的cast类型转换

reinterpret_cast用法&#xff1a;reinpreter_cast<type-id> (expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数&#xff0c;也可以把一个整数转换成一个指针。这个操作符能够在非相关的类型之间转换。操作结果…...

西瓜数据集读取的详细解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…...

Mac开发环境配置

一、mac 安装homebrew 1. 必要性 ​ homebrew可以通过bash命令快速安装配置开发环境&#xff0c;并且在大多数情况下可以实现环境的自动配置。&#xff08;一键安装配置&#xff09; 2. 收益 ​ 节省开发环境工具配置时间&#xff0c;提高人效。 3. 安装步骤 打开mac终端…...

概率论面试题1:玫瑰花

概率论面试题 1. 一个活动&#xff0c;n个女生手里拿着长短不一的玫瑰花&#xff0c;无序的排成一排&#xff0c;一个男生从头走到尾&#xff0c;试图拿更长的玫瑰花&#xff0c;一旦拿了一朵就不能再拿其他的&#xff0c;错过了就不能回头&#xff0c;问最好的策略&#xff1…...

【DGL】图分类

目录概述数据集定义Data LoaderDGL中的batched graph定义模型训练参考概述 除了节点级别的问题——节点分类、边级别的问题——链接预测之外&#xff0c;还有整个图级别的问题——图分类。经过聚合、传递消息得到节点和边的新的表征后&#xff0c;映射得到整个图的表征。 数据…...

时间复杂度的计算(2023-02-10)

时间复杂度的计算 时间复杂度的计算分为三大类&#xff1a;一层循环、二层循环和多层循环。 一层循环 1.找出循环趟数t及每轮循环i的变化值 2.确立循环停止的条件 3.得出t与i之间的关系 4.联立两式&#xff0c;得出结果 eg: void fun(int n) {int i0;while (i*i*i<n)i;…...

测试开发之Django实战示例 第六章 追踪用户行为

第六章 追踪用户行为在之前的章节里完成了小书签将外站图片保存至本站的功能&#xff0c;并且实现了通过jQuery发送AJAX请求&#xff0c;让用户可以对图片进行喜欢/不喜欢操作。这一章将学习如何创建一个用户关注系统和创建用户行为流数据&#xff0c;还将学习Django的信号框架…...

红米9a手动root方法

简介 已知红米6A/6/9/9A/9C/10A机器都可以快速解锁BL&#xff0c;无任何变砖风险 并且秒解锁BL后和官方解锁一样&#xff0c;无任何其他不良影响。推荐大家使用官网解锁&#xff0c;需要等待7天。 ​ BootLoader BootLoader是在操作系统内核运行之前运行的一段小程序。其实…...

Open3D 点云最小二乘法拟合平面(剔除噪声,Python版本)

除了诱惑之外,我可以抵抗任何事物。 ----王尔德 文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这个算法的思路很简单,就是通过剔除一些异常点来拟合更为合适的平面,具体过程如下所示: 1、首先使用最小二乘法拟合一个平面系数的初值。 2、计算所有有效点到拟合…...

【SpringBoot】简述springboot项目启动数据加载内存中的三种方法

一、前言一般来说&#xff0c;SpringBoot工程环境配置放在properties文件中&#xff0c;启动的时候将工程中的properties/yaml文件的配置项加载到内存中。但这种方式改配置项的时候&#xff0c;需要重新编译部署&#xff0c;考虑到这种因素&#xff0c;今天介绍将配置项存到数据…...

【一文速通】各种机器学习算法的特点及应用场景

近邻 (Nearest Neighbor)KNN算法的核心思想是&#xff0c;如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个类别&#xff0c;并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定…...

多传感器融合定位十四-基于图优化的定位方法

多传感器融合定位十四-基于图优化的定位方法1. 基于图优化的定位简介1.1 核心思路1.2 定位流程2. 边缘化原理及应用2.1 边缘化原理2.2 从滤波角度理解边缘化3. 基于kitti的实现原理3.1 基于地图定位的滑动窗口模型3.2 边缘化过程4. lio-mapping 介绍4.1 核心思想4.2 具体流程4.…...

个人网站建设方案模板/新东方教育培训机构官网

先说Apache和Tomcat的区别&#xff1a; Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上&#xff0c;由于其跨平台和安全性被广泛使用&#xff0c;是最流行的Web服务器端软件之一。   在Apache基金会里面ApacheServer永远会被赋予最大…...

点击到达网站指定位置怎么做/如何免费找精准客户

基本Kmeans算法介绍及其实现 http://blog.csdn.net/qll125596718/article/details/8243404/ kmeans http://www.52ml.net/1695.html转载于:https://www.cnblogs.com/XDJjy/p/4975984.html...

用node.js可以做网站吗/汤阴县seo快速排名有哪家好

step 1.选择GitHub作为博客服务器 *更详细的方法参考GitHub Pages官方文档 注册GitHub 登陆https://github.com&#xff0c;创建属于自己的GitHub帐号&#xff08;废话&#xff09;。 建立一个仓库 Repository name(仓库名)必须是 your_user_name.github.io 比如我的用户名…...

wordpress编辑器字体/推广普通话手抄报内容

【用户功能模块】 (1)登录功能&#xff1a;注册普通账号登录&#xff1b;登录后可以修改用户的基本信息&#xff0c;也可以退出。 (2)浏览资讯&#xff1a;浏览网站管理发布的资讯&#xff0c;可以评论&#xff0c;评论后需要管理员审核和查看。也可以收藏资讯。 (3)关于我们…...

如何做视频网站流程图/国外免费推广平台有哪些

1 volatile的特性 当我们声明共享变量为volatile后&#xff0c;对这个变量的读/写将会很特别。理解volatile特性的一个好方法是&#xff1a;把对volatile变量的单个读/写&#xff0c;看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明&…...

wordpress 更新url/网站快速排名

1、PNP逻辑数据库。 LOOP获取信息类型数据。 TABLES: PERNR . INFOTYPES: 0000, 0001 .START-OF-SELECTION.GET PERNR .LOOP AT P0000 WHERE ......ENDLOOP.LOOP AT P0001 WHERE ......ENDLOOP. 宏获取信息类型数据。 TABLES: PERNR, T001P. INFOTYPES: 0000, 0001 .GET PERNR …...