记ORACLE表的查询条件或关联条件执行顺序问题

查询条件或关联条件执行顺序是按照数据库结构字段顺序执行的

(下面例子中,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:

具体数据库底层如何处理,肯定有大神知道。若有问题,欢迎指正,我立马修改 ,谢谢

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值