Join 语句问题
SELECT <expr_list>
FROM <left_subquery>
[GLOBAL] [ANY|ALL] INNER|LEFT|RIGHT|FULL|CROSS [OUTER] JOIN <right_subquery>
(ON <expr_list>)|(USING <column_list>) ...
可以使用具体的表名来代替<left_subquery>
与<right_subquery>
。但这与使用SELECT * FROM table
子查询的方式相同。除非你的表是[Join](../operations/table_engines/join.md 支持的JOIN
类型
INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
CROSS JOIN
你可以跳过默认的OUTER
关键字。
ANY
与 ALL
在使用ALL
修饰符对JOIN进行修饰时,如果右表中存在多个与左表关联的数据,那么系统则将右表中所有可以与左表关联的数据全部返回在结果中。这与SQL标准的JOIN行为相同。 在使用ANY
修饰符对JOIN进行修饰时,如果右表中存在多个与左表关联的数据,那么系统仅返回第一个与左表匹配的结果。如果左表与右表一一对应,不存在多余的行时,ANY
与ALL
的结果相同
简而言之:就是一对多时,显示一条还是显示所有条的问题
GLOBAL
distribution
当使用普通的JOIN
时,查询将被发送给远程的服务器。并在这些远程服务器上生成右表并与它们关联。换句话说,右表来自于各个服务器本身。
当使用GLOBAL ... JOIN
,首先会在请求服务器上计算右表并以临时表的方式将其发送到所有服务器。这时每台服务器将直接使用它进行计算。
个人理解是:普通join依次join 而global join 是所有数据集中在一台,锁死缓存后join