avatar

一条在知识海洋的咸鱼

这个家伙很懒,啥也没有留下😋

  • 首页
  • Linux
  • OCJP
  • Java核心技术卷
  • J2EE相关标准
  • 深入理解Java虚拟机
  • NIO与SOcket编程技术指南
  • Java多线程编程核心技术
  • Redis开发与运维
  • Spring Cloud Alibaba 微服务原理与实践
  • DevOps
  • Docker
  • MySQL必知必会
  • AI自学路线
  • Spring Boot 编程思想(核心篇)
主页 第七章 数据过滤
文章

第七章 数据过滤

发表于 2021-06-27 更新于 2026-06- 10
作者 Administrator
10~13 分钟 阅读

WHERE高级搜索和NOT、IN操作符

  • 组合WHERE子句
    • 操作符(operator)
    • AND操作符
    • OR操作符
    • 计算次序
    • 在WHERE子句中使用圆括号
  • IN操作符
    • 为什么要使用IN操作符
  • NOT操作符
    • 为什么使用NOT
    • MySQL中的NOT

组合WHERE子句

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

  • AND子句
  • OR子句

操作符(operator)

用来联结或改变WHERE子句中的子句关键字。也称为逻辑操作符

AND操作符

给WHERE子句添加附加条件,指示DBMS只返回满足所有给定的条件行

SELECT
	prod_id,
	prod_price,
	prod_name 
FROM
	products 
WHERE
	vend_id = 1003 
	AND prod_price <= 10;

image.png
检索由供应商1003制造且价格小于等于10美元

OR操作符

指示DBMS检索匹配任一条件的行

SELECT
	prod_id,
	prod_price,
	prod_name 
FROM
	products 
WHERE
	vend_id = 1003 
	OR vend_id = 1002;

image.png

计算次序

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.png
如果不使用括号,则结果和预期完全不同
image.png

在WHERE子句中使用圆括号

因为圆括号具有较AND和OR操作符高的计算次序。任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组,能够确保按照预期结果运行,消除歧义

IN操作符

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

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

其等价于

SELECT
	prod_name,
	prod_price 
FROM
	products 
WHERE
	vend_id = 1002 
	OR vend_id = 1003 
ORDER BY
	prod_name;

image.png

为什么要使用IN操作符

  • IN操作符语法更清楚且更直观
  • IN操作符计算的次序更容易管理(使用的操作符更少)
  • IN操作符一般比OR操作符执行更快
  • IN操作符最大优点是可以包含其他SELECT语句,更动态地建立WHERE子句

NOT操作符

NOT操作符有且仅有一个功能,否定NOT之后所根的任何条件

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

image.png
检索1002和1003之外的所有供应商制造的产品

为什么使用NOT

简单的WHERE子句中,NOT没有什么优点,但是在复杂子句中,NOT是非常有用的

MySQL中的NOT

MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反

MySQL必知必会
SQL
许可协议: 
分享

相关文章

7月 6, 2021

第二十九章 数据库维护

7月 6, 2021

第二十八章 安全管理

确保数据的安全和完整需要利用访问控制访问控制root账户不要使用root管理用户创建用户账号简单创建一个新用户账号使用GRANT或INSERT创建重命名用户账号删除用户账号设置访问权限访问控制用户需要对其数据具有适当的访问权,既不能过多,也不能过少,例如多数用户需要对表进行读写,少数用户需要创建和删

7月 6, 2021

第二十七章 全球化和本地化

MySQL处理不同字符集和语言的基础知识字符集和校对顺序校对的重要性使用字符集和校对顺序字符集和校对顺序数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索MySQL需要适应不同的字符集(字母和字符),应应不同的排序和检索数据的方法字符集:字母和符号的集合编码:某个字符集成员的

下一篇

第八章 使用通配符进行过滤

上一篇

第六章 过滤数据

最近更新

  • 55 异常兜底:工具失败、非法输出、空检索与超时
  • 54 Agent Memory:短期记忆、用户上下文与摘要
  • 53 Human-in-the-loop:让关键动作暂停、确认与恢复
  • 52 工单 Tool:字段校验、创建结果与失败补偿
  • 51 订单 Tool:Mock、鉴权、状态解析与脱敏

热门标签

java基础 微服务 maven Spring Tomcat DDD Linux Linux基础 SQL基础 数据结构算法

目录

©2026 一条在知识海洋的咸鱼. 保留部分权利。

使用 Halo 主题 Chirpy