sql语句中in和or的区别

我在这个 SQL 中使用 IN 和 OR 时遇到了很多陷阱。

记得2 01 9 年有一次,我在北京的一个项目中负责一个数据库的查询优化。
当时我们有需求找到users表中注册日期在2 01 8 年1 月1 日到2 01 8 年1 2 月3 1 日之间的所有用户,我直接用IN,写成这样:
sql 从用户中选择 Registration_date IN ('2 01 8 -01 -01 ', '2 01 8 -1 2 -3 1 ')
因此,这个查询速度非常慢,需要很长时间才能得到结果。
后来仔细一看,我发现我直接使用了两个特定的日期。
这个其实可以通过等价比较来优化:
sql 从“用户注册日期在“01 /01 /2 01 8 ”和“3 1 /1 2 /2 01 8 ”之间选择
这里使用BETWEEN,效果比IN好很多。

还有一次,2 02 0年,在上海的一个电商项目中,我们必须过滤掉所有订单金额超过1 00元或订单状态为“已付款”的订单。
当时我觉得这个不能用IN和OR来完成,所以我写了这个SQL:
sql 从订单中选择 WHERE order_amount IN (1 00, 2 00) OR order_status = 'Paid'
查看结果后,我发现许多订单被错误地过滤掉了。
事实证明,使用 IN 有时会导致意想不到的“短路”问题。
后来我改用 OR 并通过这样写来确保条件彼此独立:
sql 从订单中选择,其中 order_amount > 1 00 OR order_status = 'Paid'
现在确实如此,效率也提高了。

综上所述,IN适合匹配值列表,而OR适合组合多个条件。
在实际应用中,还是需要根据具体情况选择合适的运营商。
一旦遇到像以前那样的问题,陷入陷阱,就不要再想着用IN和OR了。
😅

sql中in的用法

IN直接写入死值,效率低下。

示例:从学生中选择年级(“一年级”、“三年级”)。

大量数据请谨慎使用IN,JOIN可能会更快。
你自己掂量一下吧。

SQL基础教程第二版笔记——02 SELECT语句基础、算术、比较、逻辑运算符

上周我学习了第二版的SQL基础教程,发现SELECT语句是选择数据的神奇工具。
格式简单;从表名中选择列名;一旦你使用它,你就会明白。
使用星号()检查所有列。
我敢说你能说出这个专栏的名字。
添加 AS 关键字,您将获得一个别名。

2 02 3 年,朋友说他也用SELECT查常量,直接写常量。
DISTINCT去除重复,结果唯一;我发现它非常实用。

我的朋友还告诉我,我需要先过滤数据,然后使用 WHERE 子句选择列。
这个过滤器是特定的。
评论也方便。
在一行上使用双水平条,在多行上使用星号。

算术运算符的加法;减法提升 对于乘法和除法,先计算括号内的 Pair,NULL 值按 NULL 计算。
小心比较运算符。
不等号在左边,等号在右边。
字符串按词法排序。

比较 NULL 值;您可以使用 ISNULL 和 ISNOTNULL 这比直接比较更好。
<> 表示不平等。
NO 更一般。
与和或结合条件;满足所有 AND;或取悦某人。

确定优先顺序; AND 比 OR 更重要;括号可以改变顺序。
学完这个基础课,感觉数据库查询真的很简单。
你懂的,我会继续学习的。