MYSQL AND 和 OR

哎呀,说起来,我其实也曾走进过这个陷阱。
记得当时,我在做一个用户管理系统,需求是过滤1 8 岁到2 0岁之间的用户信息。
当时我直接写了一条查询语句:SELECT FROM cs_user WHERE Age BETWEEN 1 8 AND 2 0。
结果正如我所料,查到了这个年龄段的用户。

有一次,领导说:“嘿,我们需要过滤一下哪些用户注册了电子邮件地址和关联的手机号码。
”我当时就傻眼了,因为上一题用了BETWEEN,这次只好用AND来代替。
我很快改变了语句:SELECT FROM cs_user WHERE email IS NOT NULL AND Phone IS NOT NULL。
结果出来后,领导看了说,嗯,这次看起来不错。

后来,一个项目需求说:“我们需要过滤一下哪些用户是学生,哪些是老师。
”一开始我想,同学们,老师们,这只是两个条件,我们不能只用AND吗?结果,我写道: SELECT FROM cs_user WHERE type = 'student' AND type = 'teacher'。
我当时就疑惑了,怎么会是空数组呢?后来我发现我犯了一个逻辑错误。
学生和老师不可能同时高兴,所以我只能用OR。
因此更改为: SELECT FROM cs_user WHERE type = 'student' OR type = 'teacher'。
只有这样,学生和教师用户才符合标准。

这件事给我留下了深刻的印象。
以后写SQL查询的时候,我总会想清楚这些条件是必须同时满足,还是只满足其中一个。
不要小看AND和OR,如果你用不好它们就会出丑。

mysql中any的意义

你好~你在看ANY by MySQL吗?这个操作符真的很有趣,比ALL好用多了~
我自己遇到的陷阱是,刚开始使用ANY的时候,总是把它和ALL搞混了。
比如你想查询比所有订单都贵的产品,可以直接写price > ALL(SELECT Price FROM Orders),但是你会发现没有数据,因为不可能有比所有订单都贵的产品。
此时,是时候转向 ANY,价格 > ANY(从订单中选择价格)。
这样,您只需找到更便宜的订单即可。
是不是简单多了?
2 02 3 年我帮一家电商公司做报表的时候,我用ANY来查活跃用户。
他们想要找到同时购买了产品A和产品B的客户,但是购买A和B的时间并没有必然的相关性。
我会在 ANY 中这样写: 平方米 选择客户 ID 给他命令 其中产品 ID = 'A' AND order_date ANY (SELECT order_date FROMorders WHERE Product_id = 'B');
虽然这个例子有点复杂,但实际效果还是不错的,可以准确找到购买了两种产品的客户。
这种情况下IN无法解析,ANY的子查询功能就太关键了。

但是ANY有一个小问题。
当子查询返回空集时,结果将为NULL。
我上次遇到这个问题是在深圳做项目的时候。
当搜索未订购的商品时,子查询直接为空,整个查询返回NULL。
此时只能添加评级或使用COALESCE函数对其进行处理,否则数据将无法理解。

顺便问一下,您是否注意到 ANY 与 IN 非常相似,但子查询更灵活?例如,age ANY (SELECTage FROMcustomers WHERE city = 'New York') 不能使用 IN 编写。
虽然年龄IN(1 8 ,2 1 ,2 5 )这种IN的显式列表更加直观,但是当涉及到动态条件时,ANY是绝对没有选择的。

反正就看你了~如果你的查询条件需要和子查询结果进行比较,又不需要匹配所有行,那么ANY就是你的好帮手。
但记住要处理子查询为空的情况。

求大神们解答 如何在Mysql 中 用出生日期来求几个人的平均年龄

MySQL排除查询不在指定范围内的数据集mysql不在某范围内

这是一个陷阱,不要用BETWEEN来排除,用IN会更高效。

示例:排除2 3 、2 4 、2 5 岁的学生,使用IN比BETWEEN更快。

从学生中选择姓名、年龄,其中年龄不是 (2 3 , 2 4 , 2 5 );