1

例:

select count(*) from my table
where
column1 is not null
and
(column1 = 4 OR column1 = 5)

例 2:

select count(*) from my table
where
column1 is not null
and
column1 = 4 OR column1 = 5

実際の列名を持つデータベースでは、2 つの異なる結果が得られます。私がそうするなら、括弧付きのものは正しいです:

select count(*) from my table
where
column1 is not null
and
column1 = 4

その後

select count(*) from my table
where
column1 is not null
and
column1 = 5

それらを足し合わせると、正しい答えが得られる...と思います。上記の括弧を使用した最初の例と同じです。

OR テストで優先順位を変更すると、異なる結果が得られるのはなぜですか?

4

3 に答える 3

10

Oracle や SQL ではありません。これは基本的なブール論理です。AND 条件は OR よりも「強い」(優先される) ため、最初に評価されます。

column1 is not null
and
column1 = 4 OR column1 = 5

意味

column1 is not null
and
column1 = 4

が最初に評価され、次にこれとの間に OR が適用されます。column1 = 5

括弧を追加すると、OR が最初に評価され、次に AND が評価されます。

数学とほとんど同じです:

2 * 3 + 5 = 6 + 5 = 11

しかし

2 * (3 + 5) = 2 * 8 = 16

詳細はこちら: http://msdn.microsoft.com/en-us/library/ms190276.aspx

于 2012-04-05T19:14:14.367 に答える
3

これは、式が次のように解析されるかどうかにかかっています。

(column1 is not null and column1 = 4) OR column1 = 5

また

column1 is not null and (column1 = 4 OR column1 = 5)

違いを見ます?

于 2012-04-05T19:12:59.453 に答える