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