ITPub博客

首页 > 数据库 > > 表连接on 后面 and 语句和 where 条件的区别

表连接on 后面 and 语句和 where 条件的区别

作者:飘絮絮絮丶 时间:2020-05-11 10:44:52 0 删除 编辑

测试环境 oracle 11g

构建测试表:

create table t1(id int ,name1 varchar2(20),name2 varchar2(20));

create table t2(id int ,name1 varchar2(20),name2 varchar2(20));


insert into t1 values(1,'a','b');

insert into t1 values(1,'aa','bb');

insert into t1 values(2,'aa','bb');

insert into t1 values(2,'a','b');

insert into t1 values(3,'a','b');

insert into t1 values(4,'a','b');

insert into t1 values(4,'c','b');

insert into t1 values(5,'a','b');

insert into t1 values(5,'a','b');




insert into t2 values(1,'a','b');

insert into t2 values(2,'aa','bb');

insert into t2 values(2,'a','b');

insert into t2 values(3,'a','b');

insert into t2 values(4,'c','b');

insert into t2 values(5,'a','b');

insert into t2 values(5,'a','b');

insert into t2 values(5,'a','b');

insert into t2 values(4,'aa','bb');



select * from t1 left join t2 on t1.id=t2.id and t1.name1='c';

select * from t1 left join t2 on t1.id=t2.id where t1.name1='c';


查询结果如下:

可以发现 如果过滤条件写在where 中,那么先进行了过滤再进行的连接。

如果直接写在 连接条件,那么,其不会当成过滤条件,而是连接条件直接进行外连接。

这个是外连接的特殊性决定的,不管连接条件与否,总是会返回t1表上的行。满足连接条件才会有t2表上字段的值。

如果是等值连接,那么这两种方式是一样的,因为必须满足and 后面的条件才会进行连接:

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3152335/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42259