sql中on条件和where条件查询结果一样嘛?

如果使用 join不会有影响。

但是 在使用left join时,on和where条件的区别如下:

on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
where条件是在临时表生成好后,再对临时表进行过滤的条件。

因此,如果在on条件中加入b.del=0,那么只有满足该条件的b表记录才会和a表记录进行连接,否则就会用null填充。而如果在where条件中加入b.del=0,那么只有满足该条件的临时表记录才会被返回,否则就会被过滤掉。

所以,两个查询语句的结果可能是不一样的,具体取决于b表中是否有del不等于0的记录。如果有,那么第一个查询语句会返回更多的记录,而第二个查询语句会返回更少的记录。如果没有,那么两个查询语句会返回相同的记录。

以下是一个简单的示例来说明这个区别:

-- 创建a表和b表
create table a (id int, name varchar(10), del int);
create table b (id int, name varchar(10), sub_id int, del int);

-- 插入一些数据
insert into a values (1, 'a1', 0);
insert into a values (2, 'a2', 0);
insert into a values (3, 'a3', 0);

insert into b values (1, 'b1', 1, 0);
insert into b values (2, 'b2', 2, 0);
insert into b values (3, 'b3', 2, 1);

-- 查询a表和b表
select * from a;
select * from b;

-- 结果如下
id name del
----------- ---------- -----------
1 a1 0
2 a2 0
3 a3 0

id name sub_id del
----------- ---------- ----------- -----------
1 b1 1 0
2 b2 2 0
3 b3 2 1

-- 使用第一个查询语句
select a.name ,b.name from a left join b on a.id=b.sub_id 
where a.del=0 and b.del=0;

-- 结果如下
name name
---------- ----------
a1 b1
a2 b2

-- 使用第二个查询语句
select a.name ,b.name from a left join b on a.id=b.sub_id and b.del=0 
where a.del=0;

-- 结果如下
name name
---------- ----------
a1 b1
a2 b2
a3 NULL
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值