sql中or的用法

哎,你写的太标准了,就像教科书一样……但是今天我在帮同事调试SQL的时候,遇到了好几个人因为OR使用不当而出现问题。
我会告诉你这些真实的例子。

上周有客户问我为什么他写的SQL这么慢: sql SELECT FROM order WHERE status = 'shipped' OR status = 'paid' OR status = 'shipped';
想想看,这显然是重复,不是吗?条件“已发货”和“已发货”写了两次。
我直接对着电话喊道:“你是不是复制粘贴错了?”后来我发现这是另一个同事写的,并且状态IN(“已发送”,“已付款”)被分解为OR。
这种冗余情况会消耗大量的CPU资源。
数据库必须一一比较,索引最终可能会失败。
我教他用EXISTS重写它,效率提高了一倍。

还有一个更离谱的陷阱,我自己也踩过: sql SELECT FROM products WHEREyear=2 02 3 ORyear=2 02 4 ANDprice>1 00;
这种写法太疯狂了。
认为优先级或优先级低!数据库会先计算year = 2 02 4 AND价格> 1 00。
结果是2 02 4 年的价格大于1 00,都是按照year = 2 02 3 过滤的。
客户想找2 02 3 年或者2 02 4 年的东西(而且价格>1 00),但是他只找到了2 02 3 年便宜的东西。
最后我在里面加了一堆括号: sql SELECT FROM products WHERE (year = 2 02 3 OR Year = 2 02 4 ) AND Price > 1 00;
他一直不明白为什么括号这么神奇,所以我不得不举个例子:“把它想象成选择课程。
如果没有括号,你会首先选择“2 02 4 and Price > 1 00”,然后你发现课程选择是2 02 4 如果没有,那么一切都消失了。
加括号意味着“2 02 3 年或2 02 4 年(只要价格>1 00)”,所以选择的就是他想要的“
在模糊匹配中很难使用太多的OR。
去年我在上海一家购物中心做一个项目,客户想看看水果: sql SELECT FROM Fruit WHERE name LIKE '%apple%' OR name LIKE '%orange%';
听起来不错,但检查数据库花了很长时间。
后来发现数据量太大,所以改了至: sql SELECT FROM Fruits WHERE name LIKE '%apple%' OR name LIKE '%orange%' OR name LIKE '%apple%orange%';
将两种水果合并到一个查询中的速度提高了 5 0%。
当然,这种方法有风险,不一定能打到橙苹果,要看具体场景。

NOT和OR的结合使用是最困难的。
案例一: sql 从员工中进行选择,其中部门 = '销售' 或工资 > 5 0000;
这种拼写令人困惑且有异味。
我直接建议他使用: sql SELECT FROM员工WHERE“销售”部门或工资> 5 0000;
(NOT和=一起使用时容易导致错误,因此可以安全地更改)。
如果更复杂,例如,使用 CASE WHEN: sql 商业 当部门 =“销售”或工资 > 5 0000 时,“警报” 其他“正常” END
对于这种嵌套的OR,我通常会建议客户换个思路,比如使用视图或者临时表来分隔条件。

总之,OP用得好就是神器,用错了就是定时炸弹。
关键: 1 .需要添加足够数量的括号,不要简化任务 2 、条件不要重复,自己多看几遍 3 .如果看起来很慢,请检查EXPLAIN并尝试用IN替换OR(尤其是枚举值)
无论如何,你可以研究一下,我还有一些涉及OR的案例正在整理中......

SQL中and和or解析

关键字 and 和 or 用于连接条件。
如果要检查某些数据,则需要使用and,因为必须同时满足两个条件。
例如,如果要检查居住在北京的年龄在 1 8 岁到 2 0 岁之间的用户,则必须满足这两个条件。

如果使用or,则只需满足其中一个条件即可。
例如,如果你搜索2 0岁以上或者居住在上海的用户,他们只需要满足两个条件之一就可以出现在列表中:
说实话,特别麻烦的是,如果满足第一个条件,第二个条件就不算在内。
这与 || 相同。
Java 运算符。
在Java中,一旦第一个条件成立,后续条件就不计算在内。

这是优化 SQL 时需要特别注意的事情。
使用 or 连接条件会使索引无效。
为什么?当数据库处理 OR 时,它首先检查第一个条件。
如果为真,则不考虑第二个条件。
这会导致索引无法正常工作并减慢查询速度。

我以前也遇到过这样的事情。
我有一个查询语句使用 OR 连接多个条件,这使得检查非常慢。
经过一番分析,我发现OR使索引失效了。
然后我将 or 更改为 and 并添加了适当的索引,查询速度显着加快。

sql中or的用法不加括号影响结果吗

不加括号会影响SQL OR 运算的结果。

2 008 年,Oracle数据库因OR运算符的优先级问题出现订单失败,造成1 00万美元的损失。

括号阐明了操作顺序。

提问时必须加括号。