OceanBase 支持所有的连接类型,包括 inner join,outer join,semi-join 和 anti-join。其中 semi-join 和 anti-join 都是通过子查询改写得到,SQL 本身并没有表述 anti-join 和 semi-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 中找到匹配的行。