MySQL数据库07——高级条件查询

news2024/11/28 12:46:09

前面一章介绍了基础的一个条件的查询,如果多条件,涉及到逻辑运算,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%'

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高性能IO模型:为什么单线程Redis能那么快?

我们通常说Redis是单线程&#xff0c;主要是指Redis的网络IO和键值对读写是由一个线程来完成的。这也是Redis对外提供键值存储服务的主要流程。 但redis的其他功能&#xff0c;比如持久化、异步删除、集群数据同步等&#xff0c;其实是由额外的线程执行的。 Redis为什么用单线…

探讨MySQL事务特性和实现原理

一、概念 事务 一般指的是逻辑上的一组操作&#xff0c;或者作为单个逻辑单元执行的一系列操作&#xff0c;一个事务中的所有操作会被封装成一个不可分割的执行单元&#xff0c;这个单元的所有操作要么全部执行成功&#xff0c;要么全部执行失败&#xff0c;只要其中任意一个操…

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

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

个人学习系列 - 解决拦截器操作请求参数后台无法获取

由于项目需要使用拦截器对请求参数进行操作&#xff0c;可是请求流只能操作一次&#xff0c;导致后面方法不能再获取流了。 新建SpringBoot项目 1. 新建拦截器WebConfig.java /*** date: 2023/2/6 11:21* author: zhouzhaodong* description:*/ Configuration public class W…

Docker-consul的容器服务更新与发现

一.Consul概述1.1 什么是服务注册与发现服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&#xff0c;起…

Threejs中的Shadow Mapping(阴影贴图)

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

Office Server Document Converter Lib SDK Crack

关于 Office Server 文档转换器 (OSDC) 无需 Microsoft Office 或 Adob​​e 软件即可快速准确地转换文档。antennahouse.com Office Server 文档转换器 (OSDC) 会将您在 Microsoft Office&#xff08;Word、Excel、PowerPoint&#xff09;中创建的重要文档转换为高质量的 PDF …

【编程基础之Python】2、安装Python环境

【编程基础之Python】2、安装Python环境安装Python环境在Windows上安装Python验证Python运行环境在Linux上安装Python验证Python运行环境总结安装Python环境 所谓“工欲善其事&#xff0c;必先利其器”。在学习Python之前需要先搭建Python的运行环境。由于Python是跨平台的&am…

机器学习之K-means原理详解、公式推导、简单实例(python实现,sklearn调包)

目录1. 聚类原理1.1. 无监督与聚类1.2. K均值算法2. 公式推导2.1. 距离2.2. 最小平方误差3. 实例3.1. python实现3.2. sklearn实现4. 运行&#xff08;可直接食用&#xff09;1. 聚类原理 1.1. 无监督与聚类 在这部分我今天主要介绍K均值聚类算法&#xff0c;在这之前我想提一…

01-幂等性解释,问题及常用解决方案

目录 1. 幂等性简介 2. 后端如何解决幂等性问题 2.1 数据库层面 -> 2.1.1 防重表 -> 2.1.2 数据库悲观锁(不建议,容易出现死锁情况) -> 2.1.3 数据库乐观锁 -> 2.1.4 乐观锁CAS算法原理 2.2 锁层面 2.3 幂等性token层面 -> 2.3.1 简介文字描述: …

Java开发 - 问君能有几多愁,Spring Boot瞅一瞅。

前言 首先在这里恭祝大家新年快乐&#xff0c;兔年大吉。本来是想在年前发布这篇博文的&#xff0c;奈何过年期间走街串巷&#xff0c;实在无心学术&#xff0c;所以不得不放在近日写下这篇Spring Boot的博文。在还没开始写之前&#xff0c;我已经预见到&#xff0c;这恐怕将是…

中国社科院与美国杜兰大学金融管理硕士,让我们相遇在春暖花开时

在芸芸众生中&#xff0c;能拥有志同道合的朋友是一件多么幸运的事。人们常说&#xff1a;你是谁&#xff0c;就会遇见谁。走过半生才知道&#xff0c;看似命中注定的遇见谁、发生的事&#xff0c;其实都取决于自己。只有自己足够优秀&#xff0c;才能遇到更优秀的别人。在这个…

IT人的晋升之路——关于人际交往能力的培养

对于咱们的程序员来说&#xff0c;工作往往不是最难的&#xff0c;更难的是人际交往和关系的维护处理。很多时候我们都宁愿加班&#xff0c;也不愿意是社交&#xff0c;认识新的朋友&#xff0c;拓展自己的圈子。对外的感觉就好像我们丧失了人际交往能力&#xff0c;是个呆子&a…

【chatGPT】持续火热一路狂飙,简单了解下TA的功能和示例代码吧

&#x1f389;&#x1f389; 最近chatGPT持续火爆&#xff0c;一路狂飙&#xff0c;对应如何注册和使用的优质文章非常多。 所以&#xff0c;此篇文章除了整理chatGPT文章外&#xff0c;主要是讲解如何获取API Key进行接口的调用&#x1f389;&#x1f389; 目录1、chatGPT解读…

蓝牙单点技术实现路径介绍

本文主要介绍蓝牙设备与手机一对一相连的 蓝牙单点 技术。 准备工作 系统要求&#xff1a;蓝牙使用需要安卓 4.3 以及以上版本&#xff0c;智能生活 App SDK 从安卓 4.4 开始支持。Manifest 权限&#xff1a; <uses-permission android:name"android.permission.ACCE…

Fluent Python 笔记 第 3 章 字典和集合

3.1 泛映射类型 只有可散列 的数据类型才能用作这些映射里的键 字典构造方法&#xff1a; >>> a dict(one1, two2, three3) >>> b {one: 1, two: 2, three: 3} >>> c dict(zip([one, two, three], [1, 2, 3])) >>> d dict([(two, 2…

5. Spring 事务

文章目录1. Spring 事务简介2. Spring 事务角色3. Spring 事务属性3.1 事务配置3.2 案例&#xff1a;转账业务追加日志3.3 事务传播行为1. Spring 事务简介 Spring 事务作用&#xff1a;在数据层或业务层保障一系列的数据库操作同成功、同失败。 数据层有事务我们可以理解&am…

多传感器融合定位十三-基于图优化的建图方法其二

多传感器融合定位十二-基于图优化的建图方法其二3.4 预积分方差计算3.4.1 核心思路3.4.2 连续时间下的微分方程3.4.3 离散时间下的传递方程3.5 预积分更新4. 典型方案介绍4.1 LIO-SAM介绍5. 融合编码器的优化方案5.1 整体思路介绍5.2 预积分模型设计Reference: 深蓝学院-多传感…

Vue3 - 自定义指令封装

Vue3 - 自定义指令封装一. 自定义指令封装1.1 全局/局部注册自定义聚焦指令1.2 自定义指令相关参数1.3 自定义指令参数传递二. 总结一. 自定义指令封装 vue中有很多内置的指令&#xff0c;我们一般在开发中也经常用到&#xff0c;比如v-if&#xff0c;v-for等等。那么本篇文章…

Vue极简使用

Vue安装Vue模板语法安装Vue 安装nodejs 这里我安装的是14.5.4版本 https://nodejs.org/download/release/v14.15.4/解压后配置一下环境变量就行 安装cnpm镜像 (这个安装的版本可能过高&#xff0c;后面安装Vue可能出问题) npm install -g cnpm --registryhttps://registry…