如何组合 WHERE 子句以建立功能更强的更高级的搜索条件?如何使用 NOT 和 IN 操作符?

组合 WHERE 子句

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

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

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

操作符(operator) 用来联结或改变 WHERE 子句中的子句的关键

字。也称为逻辑操作符(logical operator)。

AND操作符

为了通过不止一个列进行过滤,可使用 AND 操作符给 WHERE 子句附加

条件。下面的代码给出了一个例子

此SQL语句检索由供应商 1003 制造且价格小于等于10美元的所

有产品的名称和价格。这条 SELECT 语句中的 WHERE 子句包含两

个条件,并且用 AND 关键字联结它们。 AND 指示DBMS只返回满足所有给

定条件的行。如果某个产品由供应商 1003 制造,但它的价格高于10美元,

则不检索它。类似,如果产品价格小于10美元,但不是由指定供应商制

造的也不被检索。

AND 用在 WHERE 子句中的关键字,用来指示检索满足所有给定

条件的行。

上述例子中使用了只包含一个关键字 AND 的语句,把两个过滤条件组

合在一起。还可以添加多个过滤条件,每添加一条就要使用一个 AND 。

OR 操作符

OR 操作符与 AND 操作符不同,它指示MySQL检索匹配任一条件的行。

请看如下的 SELECT 语句

此SQL语句检索由任一个指定供应商制造的所有产品的产品

名和价格。 OR 操作符告诉DBMS匹配任一条件而不是同时匹配

两个条件。

OR WHERE 子句中使用的关键字,用来表示检索匹配任一给定

条件的行

计算次序

WHERE 可包含任意数目的 AND 和 OR 操作符。允许两者结合以进行复杂

和高级的过滤

但是,组合 AND 和 OR 带来了一个有趣的问题。为了说明这个问题,来

看一个例子。假如需要列出价格为10美元(含)以上且由 1002 或 1003 制

造的所有产品。下面的 SELECT 语句使用 AND 和 OR 操作符的组合建立了一个

WHERE 子句

请看上面的结果。返回的行中有两行价格小于10美元,显然,

返回的行未按预期的进行过滤。为什么会这样呢?原因在于计

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

作符。当SQL看到上述 WHERE 子句时,它理解为由供应商 1003 制造的任何

价格为10美元(含)以上的产品,或者由供应商 1002 制造的任何产品,

而不管其价格如何。换句话说,由于 AND 在计算次序中优先级更高,操作

符被错误地组合了

此问题的解决方法是使用圆括号明确地分组相应的操作符。请看下

面的 SELECT 语句

这条 SELECT 语句与前一条的唯一差别是,这条语句中,前两个

条件用圆括号括了起来。因为圆括号具有较 AND 或 OR 操作符高

的计算次序,DBMS首先过滤圆括号内的 OR 条件。这时,SQL语句变成了

选择由供应商 1002 或 1003 制造的且价格都在10美元(含)以上的任何产

品,这正是我们所希望的

在WHERE子句中使用圆括号 任何时候使用具有 AND 和 OR 操作

符的 WHERE 子句,都应该使用圆括号明确地分组操作符。不要

过分依赖默认计算次序,即使它确实是你想要的东西也是如

此。使用圆括号没有什么坏处,它能消除歧义。

IN 操作符

圆括号在 WHERE 子句中还有另外一种用法。 IN 操作符用来指定条件范

围,范围中的每个条件都可以进行匹配。 IN 取合法值的由逗号分隔的清

单,全都括在圆括号中。下面的例子说明了这个操作符

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

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

中。

如果你认为 IN 操作符完成与 OR 相同的功能,那么你的这种猜测是对

的。下面的SQL语句完成与上面的例子相同的工作

为什么要使用 IN 操作符?其优点具体如下。

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

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

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

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

立 WHERE 子句。第14章将对此进行详细介绍

IN WHERE 子句中用来指定要匹配值的清单的关键字,功能与 OR

相当

NOT 操作符

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

跟的任何条件

NOT WHERE 子句中用来否定后跟条件的关键字。

为什么使用 NOT ?对于简单的 WHERE 子句,使用 NOT 确实没有什么优

势。但在更复杂的子句中, NOT 是非常有用的。例如,在与 IN 操作符联合

使用时, NOT 使找出与条件列表不匹配的行非常简单

MySQL中的NOT MySQL支持使用 NOT 对 IN 、 BETWEEN 和

EXISTS子句取反,这与多数其他 DBMS允许使用 NOT 对各种条件

本章讲授如何用 AND 和 OR 操作符组合成 WHERE 子句,而且还讲授了如

何明确地管理计算的次序,如何使用 IN 和 NOT 操作符

取反有很大的差别

mysql括号被过滤_mysql必知必会--数 据 过 滤相关推荐

  1. mysql数据库过滤空值_mysql必知必会--过 滤 数 据

    使用 WHERE 子句 数据库表一般包含大量的数据,很少需要检索表中所有行.通常只 会根据特定操作或报告的需要提取表数据的子集.只检索所需数据需要 指定搜索条件(search criteria),搜索 ...

  2. mysql常用的通配符_mysql必知必会--用通配符进行过滤

    LIKE 操作符 前面介绍的所有操作符都是针对已知值进行过滤的.不管是匹配一 个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,共 同点是过滤中使用的值都是已知的.但是,这种过滤方法并不是任 ...

  3. mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》

    MYSQL必知必会 一. DDL 数据定义语言 Data Definition Language 是指CREATE,ALTER和DROP语句. DDL允许添加/修改/删除包含数据的逻辑结构,或允许用户 ...

  4. mysql必_MySQL必知必会(一)

    摘自<MySQL必知必会> 1.1.1 什么是数据库 数据库:保存有组织的数据的容器(通常是一个文件或一组文件) 人们通常用数据库这个术语来代表他们使用的数据库软件.这是不正确的,它是引起 ...

  5. mysql必知必会_MySQL必知必会

    MySQL必知必会 联结的使用, 子查询, 正则表达式和基于全文本的搜索, 存储过程, 游标, 触发器, 表约束. 了解SQL 数据库基础 电子邮件地址薄里查找名字时, 因特网搜索站点上进行搜索, 验 ...

  6. mysql必知必会的数据_MySQL必知必会--汇 总 数 据

    聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提 供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分 析和报表生成.这种类型的检索例子有以下几种. 确定表中行数 ...

  7. mysql各种联结的区别_mysql必知必会-创建高级联结

    使用表别名 使用别名引用被检索的表列 别名除了用于列名和计算字段外,SQL还允许给表名起别名.这样做 有两个主要理由: 缩短SQL语句: 允许在单条 SELECT 语句中多次使用相同的表. 可以看到, ...

  8. mysql完全限定表列名_mysql必知必会--检 索 数 据

    SELECT 语句 SQL语句是由简单的英语单词构成的.这些单词称 为关键字,每个SQL语句都是由一个或多个关键字构成的.大概,最经常 使用的SQL语句就是 SELECT 语句了.它的用途是从一个或多 ...

  9. mysql必须包含数据组_MySQL必知必会--分 组 数 据

    数据分组 目前为止的所有计算都是在表的所有数据或匹配特定的 WHERE 子句的 数据上进行的.提示一下,下面的例子返回供应商 1003 提供的产品数目 但如果要返回每个供应商提供的产品数目怎么办?或者 ...

最新文章

  1. element ui只输入数字校验
  2. 提取pfx证书公钥和私钥
  3. 如何在Android实现录屏直播
  4. 源代码src修改为本地图片_20 行 Python 代码批量抓取免费高清图片!
  5. jms是java平台中面向_面向Web的JMS应用系统
  6. Javaweb项目在线学习平台系统(Spring+SpringMVC+MyBatis)
  7. iOS逆向:破解 APP防止dyld注入 的方法
  8. 树的递归思维:自顶向下、自底向上
  9. 扫普通二维码打开小程序,可进入体验版
  10. 中国半导体仍然弱小 产业生态体系亟需完善
  11. C case和UVM TB的交互,tube_print, event_sync
  12. 数学分析习题解答(四:第一部分)
  13. 节日网页HTML代码 学生网页课程设计期末作业下载 清明节大学生网页设计制作成品下载 DW节日网页作业代码下载
  14. 问卷调查怎么帮助餐饮行业?
  15. Discuz3.数据库数据表字典详解(完整版)
  16. 推荐 2 个阅读神器,发 20000 个微信红包封面
  17. 在 Metaverse 中拥抱零售业的未来:你需要知道的一切
  18. 单片机c语言sden,电力系统中多通道同步采样ADC(AD7606)与浮点DSP(ADSP-21479)通信的设计与实现...
  19. 开源全景图查看器-360player_v3.0更新
  20. 怎么知道网站服务器有没有被攻击?

热门文章

  1. 硬件篇——阻容一阶滤波电路
  2. Mencoder转换视频
  3. Java中保留两位小数,和kotlin保留两位小数
  4. 进入职场瓶颈期?3步摆脱“毛毛虫效应”,不做悲剧的“跟随者”
  5. 关键项目遇见瓶颈,你会如何应对?
  6. 在android安卓模拟器BlueStacks蓝手指上使用微信摇一摇
  7. JDBC连接mysql遇到的问题
  8. 数据库基础---选择,投影,连接,除法运算
  9. 控制理论中的几种稳定性
  10. 网络留言系统(Javaweb简易开发)