Oracle join

转载自:https://www.cnblogs.com/kerrycode/p/5935704.html

此外需要理解:

1 什么是半连接?

semi join,半连接操作,是关系代数规定的扩展操作符之一。对于“R semi-join S”其语义为:连接后的结果中,只包括R与S在公共属性上的交集所限定的R中的部分元组。

anti join,反半连接,语义与半连接相反。即“R semi-join S”相当于“S anti-join R”。

2 为什么要用半连接优化子查询?

对于子查询,其子查询部分相对于父表的每个符合条件的元组,都要把子查询执行一轮。效率低下。用半连接操作优化子查询,是把子查询上拉到父查询中,这样子查询的表和父查询中的表是并列关系,父表的每个符合条件的元组,只需要在子表中找符合条件的元组即可,不需要“父表的每个符合条件的元组,都要把子查询执行一轮”,所以效率提高。

这种优化方式,称为“上拉/扁平化”。

3. 半连接操作对于表达“半”含义的表,具有“存在即可”的含义,如果有多个元组符合连接条件,则不能让每个符合条件的元组都与外表进行连接,所以,对于半连接的表即一个内表来说,就需要把满足条件的重复元组去掉或使用索引等方式进行“只选择一个”式的操作。

原文地址:https://www.cnblogs.com/kennyael/p/10239539.html