如何组合 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必知必会--数 据 过 滤的更多相关文章

  1. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  2. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  3. mysql必知必会系列(一)

    mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

  4. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

  5. 《MySQL必知必会》整理

    目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...

  6. MySql必知必会实战练习(二)数据检索

    在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT---& ...

  7. 读《MySQL必知必会》我学到了什么?

    前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...

  8. MySQL必知必会1

    MySQL必知必会 ​ 了解SQL 什么是数据库:数据库(database)保存有阻止的数据的容器,可以把数据库想象成一个文件柜. 什么是表:表(table) 某种特定类型结构的结构化清单,数据库中的 ...

  9. MySQL必知必会(第4版)整理笔记

    参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...

  10. 《mysql 必知必会》 速查指南

    目录 增 添加一整行 插入多行 删 删除指定行 删除所有行 改 查 简单检索 结果筛选 结果排序 结果过滤 创建字段 处理函数 数据分组 其他高级用法 文章内容均出自 <MySQL 必知必会&g ...

随机推荐

  1. Centos 7 最小化部署zabbix

    前言 文章内容是作者本人编写,之前一直放在word文档中,突然有闲情转移到博客上来了,欢迎后续观看者有问题找我探讨~~~ 废话不多说,先说下原理吧 概述 工作原理 通过c/s模式采集数据,基于b/s模 ...

  2. 『开源协议』Creative Commons Attribution 3.0 License . 协议的个人理解,并 转载分享 4000个 精美可商用小图标

    为什么会研究 Creative Commons Attribution 3.0 License Creative Commons Attribution 3.0 License 简称 CC3,是 一种 ...

  3. 在华为云上开启FTP服务并建立FTP站点来从本地向服务器发送和下载文件

    时间:2019/12/8 最近学习计算机网络的时候老师布置了一个实践作业,具体要求是两个人一组,一个在电脑上建立FTP站点,另一个开启FTP服务器来进行文件的上传和下载. 看到这个的时候我灵机一动,正 ...

  4. 2020 University Rankings US News(中国)

    2020 University Rankings US News(中国)

  5. 【阿里云IoT+YF3300】13.阿里云IoT Studio WEB监控界面构建

    Web可视化开发是阿里云IoT Studio中比较重要的一个功能,通过可视化拖拽的方式,方便地将各种图表组件与设备相关的数据源关联,无需编程,即可将物联网平台上接入的设备数据可视化展现. 目前支持的组 ...

  6. css的选择器及它的种类特性?

    今天主要说的是选择器的基础, 首先看,选择器的优先级:!important > 行间样式 > id选择器 > class 选择器 == 属性选择器 > 标签选择器 > 通 ...

  7. inode和block的理解

    什么是inode和block? 所谓的inode就是索引节点(index node)的意思,在每一个存储设备被格式化创建文件系统后,所有的文件大致被分为了两部分,分别是inode和block. 其中i ...

  8. 20194653 面向对象基础3——static、this、包总结

    题目1:编写一个类Computer,类中含有一个求n的阶乘的方法.将该类打包,并在另一包中的Java文件App.java中引入包,在主类中定义Computer类的对象,调用求n的阶乘的方法(n值由参数 ...

  9. sql中常量和变量的引用

    String name =jtf.getText().trim(); String sql="select * from stu where stuname='  "+name+& ...

  10. To be contine ,NW NMM backup sqlserver failed.

    Last time, we talk about separate under one cluster backup into two diffetent AG backup. Does it wor ...