关于SQL JOIN相关条件语句的理解

一.各种join的概念和作用

关于SQL 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条件的区别如下:

  1. on条件是生成临时表使用的条件,on中的条件决定了两表中的记录是否与另一个表交叉连接,但保留基准表(左表)中不符合条件的记录.
  2. where条件则是对生成好的临时表进行过滤的条件,这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

2.示例

例表如下:
A表:
关于SQL JOIN相关语句的理解
B表:
关于SQL JOIN相关语句的理解

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表的交叉连接表
关于SQL JOIN相关语句的理解

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 JOIN相关语句的理解
sql语句6 执行结果:
关于SQL JOIN相关语句的理解
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 JOIN相关语句的理解
sql语句8 执行结果:
关于SQL JOIN相关语句的理解
由sql语句7和8,结合前面on条件的两个例子可知where条件基于on条件生成的临时表进行过滤.

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!