2011-08-01 5 views
0

可能性の重複:
Is the SQL WHERE clause short-circuit evaluated?SQLのAND文は常に実行されますか?

我々は例えば

SELECT * FROM Business WHERE Latitude < 9 AND Latitude > 10 

を行う場合の緯度は、例えば8であれば、Latitude > 10これまでと呼ばれるのですか?

mysqlについてはどうですか?

コアデータはどうですか?

SQL実装に依存するのか、AND文のいずれかが残りの部分よりも実行されない場合、WHERE句に明確な基準があります。

私は、計算力を保存できるかどうかを知るためにこれを尋ねました。最初のANDの後の式に、コンピューティング距離などの計算が高価であるとします。

+1

なぜそれは問題でしょうか? –

+0

'と'演算子の両辺が評価されます。あなたの例のクエリは、値が9以上で10以上であることができないので、決して行を返しません。 (私はMySQLでこれを確認したばかりです) – Guffa

答えて

1

WARNING:堅実な答え

あなたはおそらく間違ってANDとOR持っている(実際には条件Latitude < 9 AND Latitude > 10は意味をなさないが...)。次のようにこれが実装されているほとんどの言語で

  • OR一緒私の知る限り:いずれかに該当するまで、すべての条件がチェックされている(私はこれはまた、SQLと真実であると信じて - EDITthis answerは実際の行動がであることを示唆しています実装依存、あなたはどのRDBMSで確かにそれを取ることができないIE)
  • と一緒 1が偽
0123になるまで、すべての条件がチェックされています

だから、あなたはおそらく、この条件を書きたい:

Latitude < 9 OR Latitude > 10 

に相当する:

NOT(Latitude >= 9 AND Latitude <= 10) 
+1

Latitude <9 OR Latitude> 10はNOTと同じです(Latitude> = 9およびLatitude <= 10) – niktrs

+0

ありがとう、 – ascanio

+1

小さなコメント:Not通常はパフォーマンスが低下するため、「Latitude <9 OR Latitude> 10」がより好ましい – niktrs

関連する問題