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 中找到匹配的行。