1

多くの条件を含むいくつかの古い oracle sql ステートメントをリファクタリングしています。一部は括弧内に単一の条件です。さて、括弧は単一の条件に関係しますか? 以下の 2 つの例に違いはありますか?

例 1

WHERE
  (
         A = B
     AND B = C
  )
  AND ( A > 5 )
  AND ( B <> 0 )

例 2

WHERE
  (
         A = B
     AND B = C
  )
  AND A > 5
  AND B <> 0
4

4 に答える 4

1

私の知る限り、セマンティックの違いはありません。

私の経験では、通常、これは次のいずれかです

  • いくつかの古い状態の遺物 (おそらくOR、過去のどこかでそのブラケットにあった) または
  • これで働く開発者のスタイルだけです。
于 2013-11-06T09:15:04.693 に答える
1

投稿した2つの例に違いはありません。Oracleクエリは最後から実行されます。つまり、where条件の最後の部分が最初にフィルタリングされ、実行されます。たとえば、最初のフィルター条件はb<>0、次にA>5などです。

AND 演算子と OR 演算子を一緒に使用する場合は、ブラケットを使用することをお勧めします。ブラケットを使用しない場合、論理が不明確になることがあります。それ以外の場合は、AND 演算子ブラケットのみを使用しても違いはありません。

于 2013-11-06T09:16:19.317 に答える
0

AND のみになるまで、すべて同じです。しかし、他の演算子がある場合は、優先順位の問題が発生します。

例 1

WHERE
  (
         A = B
     AND B = C
  )
  AND ( A > 5 )
  AND ( B <> 0 )

例 2

WHERE
  (
         A = B
     AND B = C
  )
  AND A > 5
  AND B <> 0

例 3

WHERE
      A = B
  AND B = C
  AND A > 5
  AND B <> 0
于 2013-11-06T09:19:34.057 に答える
0

論理についてはどうでしょうか。OR 論理がある場合は括弧が必要ですが、この場合 (AND のみ) は意味がありません。クエリ内のすべての括弧を削除できます。

さらに深く掘り下げると、Explain Query Analyst を見ると、インタープリターが自動的にブラケットを配置していることがわかります。

于 2013-11-06T09:18:11.630 に答える