MySQL必知必会-笔记-Part3

2023-11-18

MySQL必知必会-笔记-Part3

Cha7、数据过滤

本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件。

以及NOT和IN操作符的使用。

7.1、组合WHERE子句

第6章中介绍的所有WHERE子句在过滤数据时使用的都是单一的条 件。

为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。

这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。

操作符(operator):用来联结或改变WHERE子句中的子句的关键字,又称逻辑操作符

AND

  • 为了通过不止一个列进行过滤,可使用AND操作符给WHERE子句附加条件
  • SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
  • image-20220729152854611
  • 此SQL语句检索由供应商1003制造且价格小于等于10美元的所 有产品的名称和价格。
  • 这条SELECT语句中的WHERE子句包含两 个条件,并且用AND关键字联结它们。
  • AND指示DBMS只返回满足所有给 定条件的行。

OR

  • OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行
  • SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003;
  • image-20220729153225051
  • 此SQL语句检索由任一个指定供应商制造的所有产品的产品 名和价格。
  • OR操作符告诉DBMS匹配任一条件而不是同时匹配 两个条件。

计算次序

  • WHERE可包含任意数目的AND和OR操作符。

  • 允许两者结合以进行复杂 和高级的过滤

​ SQL(像多数语言一样)在处理OR操作符前,优先处理AND操 作符。

  • SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10;
  • image-20220729153955920
  • SQL(像多数语言一样)在处理OR操作符前,优先处理AND操 作符。当SQL看到上述WHERE子句时,它理解为由供应商1003制造的任何 价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品, 而不管其价格如何。换句话说,由于AND在计算次序中优先级更高,操作 符被错误地组合了

应该使用圆括号明确地分组相应的操作符

  • SELECT prod_name,prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;

  • image-20220729154435344

  • 这条SELECT语句与前一条的唯一差别是,这条语句中,前两个 条件用圆括号括了起来。

  • 圆括号具有较AND或OR操作符高 的计算次序,DBMS首先过滤圆括号内的OR条件。

IN操作符

  • 圆括号在WHERE子句中还有另外一种用法。

  • IN操作符用来指定条件范 围,范围中的每个条件都可以进行匹配。

  • IN取合法值的由逗号分隔的清 单,全都括在圆括号中。

  • SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;

  • image-20220729155011786

  • 此SELECT语句检索供应商1002和1003制造的所有产品。

  • IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号 中。

  • IN操作符类似于OR操作符

  • 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。

  • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。

  • IN操作符一般比OR操作符清单执行更快。

  • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建 立WHERE子句。

NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所 跟的任何条件

  • SELECT prod_name,prod_price,vend_id FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
  • image-20220729155732271
  • 的NOT否定跟在它之后的条件

Cha8-用通配符进行过滤

什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。

LIKE操作符

前面介绍的所有操作符都是针对已知值进行过滤的。

不管是匹配一 个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,共 同点是过滤中使用的值都是已知的。

例如,怎样搜索产品名中包含文本anvil的所有产品?用简单 的比较操作符肯定不行,必须使用通配符。

利用通配符可创建比较特定 数据的搜索模式。

通配符(wildcard):用来匹配值的一部分的特殊字符

搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索跳进

通配符本身实际是SQL的WHERE子句中有特殊含义的字符,SQL支持几 种通配符

为在搜索子句中使用通配符,必须使用LIKE操作符。

LIKE指示MySQL, 后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较

百分号%通配符

  • 最常使用的通配符是百分号(%)。
  • 在搜索串中,%表示任何字符出现 任意次数
  • SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'jet%';
  • image-20220729160737632
  • 此例子使用了搜索模式’jet%'。在执行这条子句时,将检索任 意以jet起头的词
  • %告诉MySQL接受jet之后的任意字符,不 管它有多少字符

根据MySQL的配置方式,搜索可以是区分大小 写的。如果区分大小写,'jet%'与JetPack 1000将不匹配

通配符可在搜索模式中任意位置使用,并且可以使用多个通配符

  • SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '%anvil%';
  • image-20220729160927682
  • 搜索模式’%anvil%'表示匹配任何位置包含文本anvil的值,而 不论它之前或之后出现什么字符
  • 通配符也可以出现在搜索模式的中间
  • 虽然这样做不太有用。下面 的例子找出以s起头以e结尾的所有产品
  • SELECT prod_name FROM products WHERE prod_name LIKE 's%e';
  • image-20220729161246444
  • 重要的是要注意到,除了一个或多个字符外,%还能匹配0个字符。% 代表搜索模式中给定位置的0个、1个或多个字符
  • 虽然似乎%通配符可以匹配任何东西,但有一个例 外,即NULL。
  • 即使是WHERE prod_name LIKE '%'也不能匹配 用值NULL作为产品名的行

下划线_通配符

另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划 线只匹配单个字符而不是多个字符。

  • SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ ton anvil';
  • image-20220729162444257
  • 此WHERE子句中的搜索模式给出了后面跟有文本的两个通配 符。
  • 结果只显示匹配搜索模式的行:第一行中下划线匹配1, 第二行中匹配2。
  • 搜索模式要求匹配两 个通配符而不是一个
  • SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '% ton anvil';
  • image-20220729162548056

使用通配符的技巧

正如所见,MySQL的通配符很有用。

但这种功能是有代价的:通配 符搜索的处理一般要比前面讨论的其他搜索所花时间更长。

这里给出一 些使用通配符要记住的技巧

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该 使用其他操作符。
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用 在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起 来是最慢的
    要比前面讨论的其他搜索所花时间更长。

这里给出一 些使用通配符要记住的技巧

  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该 使用其他操作符。
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用 在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起 来是最慢的
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL必知必会-笔记-Part3 的相关文章

  • Rails 5.2.2(活动记录)WITH 语句

    我正在使用 Rails 5 2 2 并且有一个使用 WITH 语句的复杂查询 我需要使用左外连接创建该语句 我该如何做WITH活动记录中的语句 我的 TOTAL PROFILES 由查询对象驱动 并且会发生变化 而其余部分将始终保持不变 所
  • 获取每月第二个星期二的日期

    有没有办法使用 T SQL 语法找出每月第二个星期二的日期 例如 三月是十二号 四月是九号 您可以通过此方法查找 2013 年所有 第二个星期二 select dateadd day 8 datediff day 1 dateadd mon
  • 使用 Athena 从 AWS WAF 日志中的规则组列表获取终止规则

    我跟着这些说明 https docs aws amazon com athena latest ug waf logs html将我的 AWS WAF 数据放入 Athena 表中 我想查询数据以查找具有 BLOCK 操作的最新请求 此查询
  • BigQuery 标准 SQL 中具有不同架构的联合表

    附加具有不同架构的表的最佳方法是什么 表 0 架构 表1 架构 这很好用 SELECT img1 NULL as img2 FROM xxx staging table0 UNION ALL SELECT img1 img2 FROM xx
  • SQL Server 2008中与其他列的排序树

    我有一个使用它实现树的表层次结构ID column 样本数据 People Girls 1 Zoey 1 1 Kate 1 2 Monica 1 3 Boys 2 Mark 2 1 David 2 2 这是使用的顺序层次结构ID列作为排序列
  • 无法将外键值插入链接表

    我目前正在尝试将数据插入名为的表中 客户报价 该表充当 顾客 表和 客户关税 桌子 它还记录通过以下方式提交数据的用户 user table 这是我的数据库的架构 https i stack imgur com gyCdb png http
  • MySQL 启动错误 - 根元素丢失

    我在 Windows Server 2003 R2 上安装 MySQL 大约两个月了 启动时 我们会看到一个错误 显示 高严重性错误 根元素丢失 然后是另一个高严重性错误 显示 在调用 WriteToLog 方法之前必须定义日志文件路径 任
  • SELECT * FROM 员工 WHERE NULL IS NULL; SELECT * FROM 员工 WHERE NULL = NULL;

    最近开始学习oracle和sql 在学习的过程中 我遇到了我的朋友在面试时被问到的几个问题 SELECT FROM Employees WHERE NULL IS NULL 此查询生成Employees 表中的所有行 至于我所理解的Orac
  • 如何将UTF-8编码的汉字从MySql正确导出到SQL

    过去三天我们正在与严重的问题作斗争 我们从PhpmyAdmin导出MySql数据库文件 数据库条目中写入的数据是带有UTF 8字符集的中文 导出后将其转换为拉丁字符集 现在我们正在将此数据库SQl文件导入到其他主机 我们在UTF 8和排序规
  • 在关系数据库中存储 1:1 用户关系的最佳方式

    存储用户关系的最佳方式是什么 例如友谊 在关系中必须是双向的 你是我的朋友 因此我是你的朋友 数据库 例如MYSql 我可以想到两种方法 每当一个用户与另一个用户成为好友时 我都会向数据库添加两行 其中 A 行由发起用户的用户 ID 和下一
  • 删除除一行之外的所有具有重复值的行

    我有一个包含三列的表 KEY VALUE and LAST UPDATED 有重复的VALUE字段 我想删除所有具有相同的行VALUE和其他人一样except获取最新更新的信息 因此 如果表包含这些行 1 A 2013 11 08 2 B
  • MySQL Workbench 深色主题

    我刚刚开始学习 SQL 课程 并且一直在尝试不同的 GUI 我喜欢使用 MySQL Workbench 但白色背景刺瞎了我的眼睛 我已经搜索并找到了一些其他讨论编辑 xml 文件的相关帖子 我尝试用几种不同的方式对其进行编辑 但无济于事 我
  • Oracle SQL 列转行(无需 UNPIVOT)

    我目前拥有的 Team User Apples Oranges Pears Red Adam 4 5 6 Red Avril 11 12 13 Blue David 21 22 23 需要什么 Team User Product Count
  • SQL Server中根据条件进行计数

    有谁知道如何在 SQL Server 中根据条件进行计数 Example 如何对表中名称为 system 的记录以及 CaseID 记录总数进行列计数 顾客表 UserID CaseID Name 1 100 alan 1 101 alan
  • 将我的本地数据库(Mysql)复制到远程数据库(phpmyadmin)

    My MySQL database local server is connected to a weather station The data are updated continuously on my local server My
  • SQL 未插入到 Yii 中具有关系的表中

    我正在尝试创建一个用户 但所有值都没有插入到数据库中 Systems user 表与partys 表有关系 因为party id 是sytems user 的主键 没有插入任何内容 甚至没有错误 它只是返回到 创建 页面 这是我的架构 Ta
  • 在 Bluemix 中激活 PHP 扩展

    这纯粹是 Bluemix 问题 我的代码在本地主机上顺利运行 但是当我将其迁移到 Bluemix 时 我的数据库连接失败了 检查日志 我发现问题 调用未定义的函数 mysqli init HTTP 响应 500 我发现扩展已被禁用以使其更小
  • MySQL 错误 1264:列的值超出范围

    As I SETMySQL 中的 cust fax 表如下所示 cust fax integer 10 NOT NULL 然后我插入这样的值 INSERT INTO database values 3172978990 但随后它说 错误 1
  • Oracle DB & SQL Developer:“错误报告:执行已完成,但有警告” - 如何*查看*该警告?

    我正在设置一个本地 Oracle 11g 数据库 我们已经运行的另一个数据库的克隆 我正在 SQL Developer 中运行一堆生成的 PL SQL 命令 我得到输出 Error starting at line x in command
  • mysql 无法向用户授予权限,出现错误:ERROR 1819 (HY000): 您的密码不满足当前策略要求

    我正在将一个新应用程序迁移到包含 MySQL 数据库的生产环境 尝试使用以下命令授予所需权限时 GRANT ALTER CREATE ON MyDB to ThisUser 我收到错误 ERROR 1819 HY000 Your passw

随机推荐

  • idea设置鼠标自定义放大缩小代码字体问题

    快捷键 Ctrl Alt S 这是在设置IntelliJ IDEA 代码字体的快捷键设置缩小 怎么达到的了 就是ctrl 你的鼠标滑扭往下
  • 什么是编码,什么是解码。原理解读

    原文 http www cnblogs com luguo3000 p 3592562 html 编码问题一直都伴随着程序猿从不间断 刚开始学编程的时候好多次遇到编码问题 解 决了文件读取的编码问题 又遇到了网络编码问题 解决了网络编码问题
  • 进制数字的输入和输出

    写个程序 它读取一个整数并以二进制 八进制 和十六进制输出 以十六进制浮点数输出倒数 public class test1 public static void main String args 写个程序 它读取一个整数并以二进制 八进制
  • WS2812RGB灯的控制学习

    WS2812RGB WS2812 2811只需一根信号线就能控制灯带上所有led 多个灯带间可以通过串联轻松延长 在30hz的刷新频率下一个信号线能够控制至多500个led 原理 WS2812B是一个集控制电路与发光电路于一体的智能外控LE
  • 【区块链】从一笔交易看区块链运作流程

    出处 一笔交易从产生到完成的流程 搞懂区块链运作原理 可先区分出交易 Transaction 与区块 Block 两个部分 这里我们分别从区块链中一笔交易产生到完成验证的流程 以及图解一个区块 来了解区块链的运作原理 并进一步拆解5大区块链
  • android:ems

    android ems 12 设置TextView或者Edittext的宽度为12个字符的宽度 说明该控件最多只能显示12个字符 超出的部分将不显示
  • 使用el-table对排序进行回显

  • TypeScript 交叉类型(intersection type)

    在TS中和联合类型 union type 对应的还有交叉类型 intersection type 交叉类型的出现主要为了组合多个对象类型 object type 因为相对于interface object type没法继承 那么就可以通过u
  • iOS自定义导航栏-MLBNavigation

    为什么要做这个 平时使用原生导航栏 处理返回手势的时候 自己做不到像QQ那样处理的很完美 虽然有很多大大写的有不错的框架 个人感觉有些框架太繁重 并且还是不能满足一些要求 所以做这个 很简单 需要的参考 大神绕道 安装 下载demo 将ML
  • 2022芯原芯片设计 笔试题分析和讨论

    2022芯原设计笔试题分析和讨论 以下仅为个人理解和分析 不保证正确 欢迎大家发表自己的想法 讨论出正确答案 企业知识题 1 1 D 芯原的主要经营模式为芯片设计平台即服务 Silicon Platform as a Service SiP
  • 分布式日志收集(ELK)

    ELK简介 ELK Elasticsearch Logstash Kibana 是同一家公司开发的3个开源工具 可组合起来搭建海量日志分析平台 目前很多公司都在使用这种方式搭建日志分析平台进行大数据分析 参考 初识ES数据库 Logstas
  • 无向图邻接表实现

    无向图邻接表实现 顶点 按照编号顺序将顶点数据存储在一维数组当中 关联同一个顶点的边 以顶点为尾的弧 用线性链表存储 头结点 data firstarc 表结点 adjvex 邻接点的序号 存放与vi邻接的顶点在表头数组中的位置 nexta
  • Scrapy 存数据到Hbase

    网上很多教程都是使用Scrapy存数据到MongoDB Mysql或者直接存入Excel中的 很少有存入到Hbase里面的 前言 为什么没有像大多数网上那样将数据存入到MongoDB Mysql中呢 因为项目中使用到Hbase加上阿里云的推
  • 唯一标识一台计算机解决方法:

    首先 网上介绍最多的方法就是cpu baseboard等硬件设备的序列号 但是 这两种获取方法都有问题 wmic cpu get processorid获取的cpu序列号 其实只是某个系列的代号 并不是唯一的 比如 12代i9都用的是一个C
  • Qt学习之QList类

    QList的定义 一 简介 QList lt T gt 常用的容器类 它是一个列表 存储了给定类型的值 而这些值可以通过索引访问 二 定义 QList
  • [项目管理-27]:任务的目的,背后的原因是任务实施首要思考的问题。

    案例 无论是一个项目 还是一项任务 在实施之前 弄清楚原因 是项目经理必须有的思维模式 而不是无条件的盲目的执行 只有弄清楚目的和原因 才能在执行过程中 遇到问题时 发挥主观能动性 采用各种灵活变通的方法解决问题 最后确保项目的成功 另一方
  • Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】

    目录 一 前言 二 效果展示 1 APP界面展示 2 C51硬件展示 三 Android Studio APP源代码 1 AndroidManifest xml 1 请求联网 2 开放明文传输 2 MainActivity java 3 L
  • python同步系统时间

    公司的电脑比较老旧 主板上的电池也没电了 每天都得手动调时间 自动同步也因为日期每天都被重置了而无法同步ntp服务器 想拆开换电池发现机箱也打开不了 emmm 无奈之下 自己做一个同步时间的脚本吧 然后用bat运行 加入开机启动项每天开机自
  • 员工分组-STL案例

    案例描述 1 公司今天招聘了10个员 ABCDEFGHUIJ 10名员工进入公司后 需要指派员工在那个部门工作 2 员工信息有 姓名 工资组成 部门分为 策划 美术 研发 3 随机给10名员工分配部门和工资 4 通过multimap进行信息
  • MySQL必知必会-笔记-Part3

    MySQL必知必会 笔记 Part3 Cha7 数据过滤 本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件 以及NOT和IN操作符的使用 7 1 组合WHERE子句 第6章中介绍的所有WHERE子句在过滤数据时使用的都是单一的