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

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 09:34   48   0

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

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

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP