推荐答案
MySQL 的 JOIN
操作主要有以下几种类型:
- INNER JOIN:返回两个表中满足连接条件的记录。
- LEFT JOIN(或 LEFT OUTER JOIN):返回左表中的所有记录,即使右表中没有匹配的记录。
- RIGHT JOIN(或 RIGHT OUTER JOIN):返回右表中的所有记录,即使左表中没有匹配的记录。
- FULL JOIN(或 FULL OUTER JOIN):返回左右表中的所有记录,即使没有匹配的记录。
- CROSS JOIN:返回两个表的笛卡尔积,即所有可能的组合。
- SELF JOIN:表与自身进行连接,通常用于处理层次结构或递归关系。
本题详细解读
INNER JOIN
INNER JOIN
是最常用的连接类型,它只返回两个表中满足连接条件的记录。如果左表中的某条记录在右表中没有匹配的记录,那么这条记录不会出现在结果集中。
SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;
LEFT JOIN
LEFT JOIN
返回左表中的所有记录,即使右表中没有匹配的记录。如果右表中没有匹配的记录,结果集中右表的列将包含 NULL
。
SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
RIGHT JOIN
RIGHT JOIN
与 LEFT JOIN
类似,但它返回右表中的所有记录,即使左表中没有匹配的记录。如果左表中没有匹配的记录,结果集中左表的列将包含 NULL
。
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
FULL JOIN
FULL JOIN
返回左右表中的所有记录,即使没有匹配的记录。如果某一边没有匹配的记录,结果集中对应的列将包含 NULL
。需要注意的是,MySQL 本身不支持 FULL JOIN
,但可以通过 UNION
操作来模拟。
-- -------------------- ---- ------- ------ ------- ---- ------ ---- ---- ------ -- ------------- - ------------- ----- ------ ------- ---- ------ ----- ---- ------ -- ------------- - --------------展开代码
CROSS JOIN
CROSS JOIN
返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行进行组合。结果集的行数等于左表的行数乘以右表的行数。
SELECT columns FROM table1 CROSS JOIN table2;
SELF JOIN
SELF JOIN
是表与自身进行连接的操作,通常用于处理层次结构或递归关系。例如,可以用来查找员工的上级。
SELECT e1.employee_name, e2.employee_name AS manager_name FROM employees e1 INNER JOIN employees e2 ON e1.manager_id = e2.employee_id;