先在Mysql中插入4条数据,如下:
现在要查询 名字叫张三或者李四,且年龄为18 的数据。
根据需求编写sql语句并执行,应该查出2条数据,可执行结果如下:
查出3条数据,多出一条 名字叫张三,年龄为20 的数据。
分析:
主要原因在于——MySQL中,AND的执行优先级高于OR,优先执行AND,并不是编写顺序执行。
where name = '张三' or name = '李四' and age = 18
对于以上的条件sql,MySQL会默认优先执行 name = ‘李四’ and age = 18 ,再把得到的结果与 name = ‘张三’ 执行or操作。
含义相当于:查询 名字叫李四 且 年龄为18 或者 名字叫张三 的数据。
这种默认执行,会把 名字叫张三 的数据全部查询出来,所以多出一条数据,并不准确。
解决:
用括号()把条件组合起来以改变MySQL执行顺序。