2011-08-01 2 views
0

Possible en double:
Is the SQL WHERE clause short-circuit evaluated?Une instruction AND dans SQL est-elle toujours exécutée?

Si nous

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

par exemple, sera Latitude > 10 jamais appelé si Latitude est 8 par exemple?

Qu'en est-il de mysql?

Qu'en est-il des données de base?

Est-ce que cela dépend de l'implémentation SQL ou existe-t-il une norme définie dans laquelle la clause where si l'une des instructions AND est fausse que le reste ne sera pas exécutée?

J'ai demandé ceci pour savoir si je peux économiser de l'énergie de calcul. Dites l'expression après la première ET est coûteux à calculer comme la distance de calcul.

+1

Pourquoi serait-il pertinent? –

+0

Les deux côtés de l'opérateur 'and' sont évalués. La requête dans votre exemple ne retournera jamais aucune ligne, car une valeur ne peut pas être inférieure à neuf et plus de dix en même temps. (Je viens de vérifier cela dans MySQL pour être sûr.) – Guffa

Répondre

1

AVERTISSEMENT: terre-à-terre réponse

Vous avez probablement confondu avec ou (en fait état Latitude < 9 AND Latitude > 10 n'a pas de sens ..).

  • OU conjonction AFAIK dans la plupart des langues cela est mis en œuvre comme suit: chaque condition est vérifiée jusqu'à ce que l'une est vraie (je crois que cela est également vrai avec SQL - EDIT: this answer suggère que le comportement réel est dépendant de la mise en œuvre, à savoir que vous ne pouvez pas prendre cela pour que dans tous les SGBDR)
  • ET conjonction chaque condition est vérifiée jusqu'à ce qu'un est faux

Donc vous vouliez probablement écrire cette condition:

Latitude < 9 OR Latitude > 10 

qui équivaut à:

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

Latitude <9 OR Latitude> 10 est équivalent à: NON (Latitude> = 9 ET Latitude <= 10) – niktrs

+0

merci, corrigé – ascanio

+1

Un petit commentaire: Non, Pas égal les performances sont généralement dégradées, donc "Latitude <9 OR Latitude> 10" est plus préférable – niktrs

Questions connexes