联接类型 
=========================





OceanBase 数据库支持所有的联接类型，包括 INNER JOIN，OUTER JOIN，SEMI-JOIN 和 ANTI-JOIN。其中 SEMI-JOIN 和 ANTI-JOIN 都是通过子查询改写得到，SQL 本身并没有表述 SEMI-JOIN 和 ANTI-JOIN 的语法。OceanBase 数据库的所有联接算法 (NESTED LOOP JOIN, HASH JOIN, MERGE JOIN） 目前都支持多种联接类型。

INNER JOIN 
-------------------

INNER JOIN (内联接)是数据库中最基本的联接操作。内联接基于联接谓词将两张表(如 A 和 B)的列组合在一起，产生新的结果表。查询会将 A 表的每一行和 B 表的每一行进行比较，并找出满足联接谓词的组合。当联接谓词被满足，A 和 B 中匹配的行会按列组合(并排组合)成结果集中的一行。联接产生的结果集，可以定义为首先对两张表做笛卡尔积(交叉连接)--- 将 A 中的每一行和 B 中的每一行组合，然后返回满足连接谓词的记录。

OUTER JOIN 
-------------------

OUTER JOIN（外联接）并不要求联接的两表的每一条记录在对方表中都一条匹配的记录。要保留所有记录（甚至这条记录没有匹配的记录也要保留）的表称为保留表 **。** 外联接可依据联接表保留左表, 右表或全部表的行而进一步分为左外联接, 右外联接和全联接。其中左外联接中左表的一行未在右表中找到的时候，就在右表自动填充 NULL。右外联接中右表的一行未在左表中找到的时候，就在左表自动填充 NULL。全联接就是左表或者右表找不匹配行的时候都会自动填充。

SEMI-JOIN 
------------------

当 A 表和 B 表进行 SEMI-JOIN 的时候，它只返回 A 中所有能够在 B 中找到匹配的行。

ANTI-JOIN 
------------------

当 A 表和 B 表进行 ANTI-JOIN 的时候，它只返回 A 中所有不能在 B 中找到匹配的行。
