MySQL(三)WHERE过滤数据

本文介绍了MySQL中WHERE子句的使用,包括AND和OR操作符及其计算次序,解释了如何通过括号调整运算优先级。此外,还详细讲解了IN和NOT操作符的应用,IN操作符的优势在于其语法简洁、易于管理和运行效率高。通过示例展示了如何使用这些操作符来过滤和查询数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在MySQL检索数据时,我们总是需要让被检索的数据满足各种各样的条件,在MySQL中,通过关键字 WHERE来对数据进行过滤。
下面还以该表做例

namecityagezipemail
ergouHRB391101203xxxx@163.com
joeBJ201021024xxxx@163.com
johnBD141541431xxxx@163.com
mikeTJ181121655xxxx@163.com
smithSJZ451321232xxxx@163.com
szqBJ231102236xxxx@163.com

例如想要查找年龄小于30岁的所有人员的信息

SELECT *
FROM exampletable
WHERE age<30;

得出结果:

namecityagezipemail
joeBJ201021024xxxx@163.com
johnBD141541431xxxx@163.com
mikeTJ181121655xxxx@163.com
szqBJ231102236xxxx@163.com

AND、OR与其计算次序

1.AND,OR操作符

and与or在MySQL中的涵义与计算机其他分支中的涵义相同,具体内容可以参考文章 数字逻辑电路,逻辑运算与或非
以前面文章的表exampletable为例,
如果需要查找身处北京,且年龄小于等于20岁的人那么,可以用到操作符 AND,即满足所有条件即为真,满足一条或全部不满足即为假
AND左右两边条件同时满足后,语句为真。也就是要查找 city=‘BJ’ 同时age<=20 条件成立的数据才符合要求。

SELECT *
FROM exampletable
WHERE city='BJ' AND age<=20;

得出结果:

namecityagezipemail
joeBJ201021024xxxx@163.com

那么如果想让输入的条件满足一条即可成立,那么会使用到OR操作符,即满足一条或两条全部满足即为真,全部不满足即为假
如果当前有需求需要查找city='BD’或者city='BJ’的人员信息

SELECT *
FROM exampletable
WHERE city='BD' OR city='BJ';

得出结果:

namecityagezipemail
joeBJ201021024xxxx@163.com
johnBD141541431xxxx@163.com
szqBJ231102236xxxx@163.com

2.AND/OR的计算次序

在条件想对简单的需求下,可能仅仅需要单独使用AND或者OR即可,但是在复杂条件下,可能需要多个条件的过滤语句。
比如:查找年龄小于等于20且身处BJ或SJZ的人员信息
如果我们这样写:

SELECT *
FROM exampletable
WHERE age<=20 AND city='BJ' OR city='SJZ';

看起来好像没什么问题,我们预计的结果是只有

namecityagezipemail
joeBJ201021024xxxx@163.com

符合上述条件,因为在表中没有身处SJZ且年龄小于等于20岁的人员
但是我们运行了代码发现结果和预想中的不一致:

namecityagezipemail
joeBJ201021024xxxx@163.com
smithSJZ451321232xxxx@163.com

最后结果发现45岁的smith也被检索出来了
这是因为AND的优先级比OR要高,这就导致上述代码下,优先计算了年龄小于等20并且city是bj的人员,然后又将得出的结果与city是SJZ的人员信息做或运算,将满足一条或者同时满足的人员信息全部输出出来
那么这个问题要如何规避呢?那就是通过()来确定优先级,最内层的括号内的操作符运算次序最高
现在增加()后

SELECT *
FROM exampletable
WHERE age<=20 AND (city='BJ' OR city='SJZ');

得出正确的计算结果:

namecityagezipemail
joeBJ201021024xxxx@163.com

IN NOT 操作符

1.IN操作符

IN操作符在WHERE语句下用于规定条件范围,当满足条件范围时,数据符合条件。此条件范围不是指20-40的区间段范围,是指符合括号内所描述的条件即可,本质上与OR操作符功能相同
需求:找出在表中,城市为BJ,TJ,SJZ的人员信息

SELECT *
FROM exampletable
WHERE city IN ('BJ','TJ','SJZ');

得出结果:

namecityagezipemail
joeBJ201021024xxxx@163.com
mikeTJ181121655xxxx@163.com
smithSJZ451321232xxxx@163.com
szqBJ231102236xxxx@163.com

使用OR也可以达到同样的效果

SELECT *
FROM exampletable
WHERE city='BJ'OR city='TJ'OR city='SJZ';

虽然OR可以达到同样的效果,但是相比之下,IN操作符有着以下优点:
1.语法清晰直观 2.语序易管理 3.运行速度更快

2.NOT操作符

not可以为非,即取反。
例如上述需求做改动,找出在表中,城市不在BJ,TJ,SJZ的人员信息

SELECT *
FROM exampletable
WHERE city  NOT IN ('BJ','TJ','SJZ');

得出结果:

namecityagezipemail
ergouHRB391101203xxxx@163.com
johnBD141541431xxxx@163.com

注:MySQL中NOT目前仅支持对IN,BETWEEN和EXISTS子句取反,其他的均不支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值