mysql中的where子句层次结构是什么

时间:2015-02-26 20:44:09

标签: mysql where-clause

我在接受采访时遇到了这个问题。他们问是否有任何等级制度。
例如: SELECT * FROM发票WHERE invoiceID = 100 AND grossAmount> 2000 AND customerName =' Adam'
是否有特殊的层次结构来添加这3个条件?有点像先查看数字条件吗? 请给我你的意见。

2 个答案:

答案 0 :(得分:2)

查询优化器将查看WHERE子句中的条件,并按照它找到的顺序对它们进行评估:

  1. 确保正确性
  2. 利用有关数据库的索引和其他信息
  3. 例如,如果您在invoiceID上有索引,则可能首先对其进行评估,以便在检查customerName和grossAmount时检查的行数较少。

    您的示例是所有'AND'子句,因此不涉及优先级。

答案 1 :(得分:1)

以下是Oracle网站上的official documentation

在您的情况下,查询将按其编写的方式运行,因为=<具有相同的运算符优先级。

SELECT * FROM invoice WHERE (invoiceID=100 AND grossAmount>2000 AND customerName= 'Adam')

如果是OR条款

 SELECT * FROM invoice WHERE (invoiceID=100) OR (grossAmount>2000 AND customerName= 'Adam')

然后AND首先运行,然后运行OR。只有在存在相同运算符的情况下才会进入= +等。检查文档是否有订单。