zoukankan      html  css  js  c++  java
  • SQL AND和OR求值顺序

    假如需要列出价格为10美元及以上,且由DLL01或BRS01制造的所有产品。下面的SELECT语句使用组合的AND和OR操作符建立了一个WHERE子句:

    SELECT prod_name, prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = ‘BRS01’ AND prod_price >= 10;

    分析▼

    请看上面的结果。返回的行中有4行价格小于10美元,显然,返回的行未按预期的进行过滤。为什么会这样呢?原因在于求值的顺序。SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。当SQL看到上述WHERE子句时,它理解为:由供应商BRS01制造的价格为10美元以上的所有产品,以及由供应商DLL01制造的所有产品,而不管其价格如何。换句话说,由于AND在求值过程中优先级更高,操作符被错误地组合了。

    此问题的解决方法是使用圆括号对操作符进行明确分组。请看下面的SELECT语句及输出:

    SELECT prod_name, prod_price FROM Products WHERE (vend_id = 'DLL01' OR vend_id = ‘BRS01’) AND prod_price >= 10;

    总结:在WHERE子句中使用圆括号 任何时候使用具有AND和OR操作符的WHERE子句,都应该使用圆括号明确地分组操作符。不要过分依赖默认求值顺序,即使它确实如你希望的那样。使用圆括号没有什么坏处,它能消除歧义。

  • 相关阅读:
    Python之旅.第八章.网络编程
    Python之旅.第八章网络编程
    Python之旅.第八章.网络编程
    Python之旅.第七章.异常处理
    Python之旅.第六章.面向对象高级
    第五章.面向对象.总结
    Python之旅.第五章.面向对象.
    Python之旅.第五章.面向对象
    Python之旅.第五章.面向对象
    flexible.js
  • 原文地址:https://www.cnblogs.com/thiaoqueen/p/7057143.html
Copyright © 2011-2022 走看看