关于SQL JOIN相关条件语句的理解
一.各种join的概念和作用
- inner join:内连接,只返回两个表中符合条件的记录.
- left join:左连接,返回左表中所有记录及右表中符合条件的记录.
- right join:右连接,返回右表中所有记录及左表中符合条件的记录.
- full join:外连接,返回两个表中的记录(left join+right join).
二.sql语句join中的on和where关键字
1.left/right join中on和where的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left jion时,on和where条件的区别如下:
- on条件是生成临时表使用的条件,on中的条件决定了两表中的记录是否与另一个表交叉连接,但保留基准表(左表)中不符合条件的记录.
- where条件则是对生成好的临时表进行过滤的条件,这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
2.示例
例表如下:
A表:
B表:
sql语句1:
select * from a,b;
sql语句2:
select * from a inner join b;
sql语句3:
select * from a left join b on a.id is not null;
sql语句4:
select * from a right join b on a.id is not null;
结果都是一样的,返回a,b表的交叉连接表
on条件示例
sql语句5:
select * from a left join b on a.id > 1;
sql语句6:
select * from b left join a on a.id > 1;
sql语句5 执行结果:
sql语句6 执行结果:
sql语句5 可见不符合a.id > 1
条件的记录不参与两表的交叉连接,但是a表为基准表,所以仍然保留显示不符合条件的记录.
sql语句6 不符合a.id > 1
条件的记录同样不参与两表的交叉连接,但a表作为连接表不符合条件的记录则不会保留.
where条件示例
基于语句5和语句6添加where条件
sql语句7:
select * from a left join b on a.id > 1 where a.id < 3;
sql语句8:
select * from b left join a on a.id > 1 where a.id < 3;
sql语句7 执行结果:
sql语句8 执行结果:
由sql语句7和8,结合前面on条件的两个例子可知where条件基于on条件生成的临时表进行过滤.
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: