Mysql查询/操作顺序

时间:2016-05-21 11:39:26

标签: mysql

我正在试图找出这个任务:

如果颜色信息不为空或不为空,请列出每个种马的所有细节。

表:

enter image description here

以下似乎不起作用,我继续获取有关母马的信息:

SELECT * FROM horse
WHERE (gender='S')  
AND colour IS NOT NULL
or NOT colour='';

我认为括号意味着gender='S'首先会“触发”,但我想我误解了操作的顺序?

感谢。

1 个答案:

答案 0 :(得分:0)

这里有几个问题。首先,and的优先级高于or,因此您的where子句实际上被解释为((gender='S') AND colour IS NOT NULL) or (NOT colour='')。其次,即使您正确使用了括号,(colour IS NOT NULL NOT colour='')也始终为真 - 如果colornull则不等于'',如果它是'',它不是null。实际上,您只需要一系列and条件:

SELECT * 
FROM   horse
WHERE  gender='S' AND 
       colour IS NOT NULL AND
       colour != '';