联表查询

联表查询的关键字为 join...on...,常见的join类型为以下几种

inner join 

  从多个表中返回满足join条件的所有行。如果表中有至少一个匹配,则返回行。

  语法:select column_names from t1 inner join t2 on t1.column_name = t2.column_name;

left join

  即使右表中没有匹配,也从左表返回所有的行。

right join

  即使左表中没有匹配,也从右表返回所有的行。

full join 

  只要其中一个表存在匹配,则返回行。

联表查询在数据库中如何执行呢?

1、执行笛卡尔积(交叉联接)

  当我们在进行SQL联表时,实际上时在数据库中生成了一张笛卡尔积的虚表T1,T1里面的数量正是关联的两张表数量的乘积条。

2、执行过滤筛选

  当join将两个表生成笛卡尔积的虚表T1后,随后的ON开始执行筛选功能,ON后面的条件就是指符合条件的返回结果true,否则false,及未知unknown(null,null代表缺失值,当把一个缺失值跟其他任意值比较,结果始终为unknown)。

3、添加外部行

  这一步只在外连接(out join)中才会发生,对于外联接,通过为其指定一种联接方式(left、right、full),就把一个或两个输入表标记为保留表,即希望返回该表的所有行,即使on过滤了一些行。

  左连接(left join)就是把左边的表作为保留表,右连接(right join)就是把右边的表作为保留表,全连接(full join)就是把两个表都作为保留表。

总结以上

  

原文地址:https://www.cnblogs.com/smallzhen/p/12104941.html