推荐答案
Presto 支持以下几种 JOIN 类型:
- INNER JOIN:返回两个表中满足连接条件的记录。
- LEFT JOIN(或 LEFT OUTER JOIN):返回左表中的所有记录,以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则返回 NULL。
- RIGHT JOIN(或 RIGHT OUTER JOIN):返回右表中的所有记录,以及左表中满足连接条件的记录。如果左表中没有匹配的记录,则返回 NULL。
- FULL JOIN(或 FULL OUTER JOIN):返回左表和右表中的所有记录。如果某一边没有匹配的记录,则返回 NULL。
- CROSS JOIN:返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合。
- NATURAL JOIN:根据两个表中具有相同名称的列自动进行连接。
本题详细解读
INNER JOIN
INNER JOIN 是最常用的 JOIN 类型之一。它只返回两个表中满足连接条件的记录。如果左表或右表中没有匹配的记录,则这些记录不会出现在结果集中。
SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
LEFT JOIN
LEFT JOIN 返回左表中的所有记录,即使右表中没有匹配的记录。如果右表中没有匹配的记录,则结果集中右表的列将包含 NULL 值。
SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
RIGHT JOIN
RIGHT JOIN 与 LEFT JOIN 类似,但它返回右表中的所有记录,即使左表中没有匹配的记录。如果左表中没有匹配的记录,则结果集中左表的列将包含 NULL 值。
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
FULL JOIN
FULL JOIN 返回左表和右表中的所有记录。如果某一边没有匹配的记录,则结果集中对应的列将包含 NULL 值。
SELECT * FROM table1 FULL JOIN table2 ON table1.column = table2.column;
CROSS JOIN
CROSS JOIN 返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合。这种 JOIN 类型通常用于生成所有可能的组合。
SELECT * FROM table1 CROSS JOIN table2;
NATURAL JOIN
NATURAL JOIN 根据两个表中具有相同名称的列自动进行连接。它不需要显式指定连接条件。
SELECT * FROM table1 NATURAL JOIN table2;
这些 JOIN 类型在 Presto 中都可以使用,具体选择哪种 JOIN 类型取决于你的查询需求。