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

你可能感兴趣的:(数据库)