数据库

mysql数据库join联结中的on和where

2019-11-11  本文已影响0人  二狗不是狗

on和where的区别

1、where条件是在临时表生成好后,再对临时表进行过滤的条件;
2、on条件是在生成临时表前使用的条件,它会先做条件过滤,在做表联结。

示例表

后文的讲解都是基于下面示例表a和示例表b来进行的(左表a,右表b)


image.png

where使用

在联表语句中使用where是先联表查询生成临时表,在对临时表执行where条件过滤。

select * from a left join b on a.id=b.id where a.name="a11";

left join中使用on

对左表条件执行on:先对左表进行过滤;如果在条件中的记录正常联表;如果不在条件中的则展示左表,右表内容都是null。下面三个查询语句依次对应下图的三个结果

select * from a left join b on a.id=b.id and a.id=1;
select * from a left join b on a.id=b.id and a.id=2;
select * from a left join b on a.id=b.id and a.id=3;
image.png

对右表条件执行on:先对右表进行过滤;如果在条件中的记录正常联表;如果不在条件中的则展示左表,右表内容都是null。下面三个查询语句依次对应下图的三个结果

select * from a left join b on a.id=b.id and b.id=1;
select * from a left join b on a.id=b.id and b.id=2;
select * from a left join b on a.id=b.id and b.id=3;
image.png

right join中使用on

对左表条件执行on:先对左表进行过滤;如果在条件中的记录正常联表;如果不在条件中的则展示右表,左表内容都是null。下面三个查询语句依次对应下图的三个结果

select * from a right join b on a.id=b.id and a.id=1;
select * from a right join b on a.id=b.id and a.id=2;
select * from a right join b on a.id=b.id and a.id=3;
image.png

对右表条件执行on:先对右表进行过滤;如果在条件中的记录正常联表;如果不在条件中的则展示右表,左表内容都是null。下面三个查询语句依次对应下图的三个结果

select * from a right join b on a.id=b.id and b.id=1;
select * from a right join b on a.id=b.id and b.id=2;
select * from a right join b on a.id=b.id and b.id=3;
image.png

inner join中使用on

不论对左表还是右表条件执行on都是先对表执行条件,在联表。

select * from a join b on a.id=b.id and a.name="a111" and b.id=1;
image.png
上一篇下一篇

猜你喜欢

热点阅读