SQL中的连接(join)子句 直观上很好理解,就是把表A中的每条元组和表B中每条元组拼接起来
连接之所以出现分类,我认为最大的原因在于表A和表B中存在共同的列,从而导致在拼接元组的时候会有不同的方式
我们先介绍一下由几种join:
A inner join B 我认为inner join是最好理解的一种:就是将A组中的每条元组和表B中的每条元组都拼接一次
A left outer join B :这种连接保证A中的每条元组都会出现,而且outer join 必须搭配连接条件使用,什么是连接条件我在下面介绍
A right outer join B:这种连接保证B中的每条元组都会出现
连接条件:
natural:自然连接,用法是加在join前面:natural inner join或者natural left outer join 意思是把A和B中具有相同列取值的元组拼接,其他的元组不拼接,如果是left outer join,A中若有元组在B中找不到合适的拼接对象(即B中没有元组与A具有相同列取值),那么A中这种元组就与一条空元组(属性全是null)拼接,在查询结果中,这个公共列就不再区分是A还是B的了
on子句:一般是加在join后面:A natural inner join B on A.id = B.id , 若A,B中的两条元组满足on子句后面的关系,则拼接起来,在查询结果中,这个公共列前面还是带着前缀,A.id B.id ,以此来区分是A的还是B的
using子句: 一般是加在和on相同的位置,using(col1,col2...coln)括号中是A和B的公共列的子集,A和B的元组若在这个子集上取值相同,则连接起来,在查询结果中,不区分A,B