查询条件或关联条件执行顺序是按照数据库结构字段顺序执行的
(下面例子中,t_1表,C1字段在前,C2字段在后)
如:
select * from table t_1 t where t.c2 = 123, t.c1='123';
假设,C2字段存放的值都是字符串,从表面来看,此语句执行是会报错的,因为123是数字,数据会将C2字段转换成数字和123进行比较,这样就会报错“无效数字”。然而:这是分情况的。
1:若C1=‘123’ = false,则C2=123条件不执行。比如:if(a && b)若a=false,则不会判断b
2:若C1='123' = true,则继续判断C2=123,因为C2值是字符串,则报错“无效数字”
实验证明:数据库执行SQL语句select * from table t_1 t where t.c2 = 123, t.c1='123' 的时候,优先判定的是C1而不是C2。因为C1字段在C2字段的前面,有优先执行权,而不是根据书写顺序判断(这个是我根据实验证明的,有兴趣的小伙伴可以试试)。
select *
from t_1 t1
left join t_2 t2 on t2.C2 = 'abc' and t2.C1 = t1.C1,原理和上述是一样的(有兴趣的小伙伴可以验证验证)
PS:
具体数据库底层如何处理,肯定有大神知道。若有问题,欢迎指正,我立马修改 ,谢谢