我在接受采访时遇到了这个问题。他们问是否有任何等级制度。
例如: SELECT * FROM发票WHERE invoiceID = 100 AND grossAmount> 2000 AND customerName =' Adam'
是否有特殊的层次结构来添加这3个条件?有点像先查看数字条件吗?
请给我你的意见。
答案 0 :(得分:2)
查询优化器将查看WHERE子句中的条件,并按照它找到的顺序对它们进行评估:
例如,如果您在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
。只有在存在相同运算符的情况下才会进入=
+
等。检查文档是否有订单。