涂胶显影机(Track)组长级工程师完整JD(12维度)+ 对外简化版JD
2026/7/25 19:47:48
MySQL 中的 JOIN 操作用于将多个表中的数据关联起来,常见的 JOIN 类型包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN(MySQL 不直接支持 FULL JOIN,但可通过 UNION 实现)。以下是它们的特点及典型应用场景。
| JOIN 类型 | 结果集特征 | 驱动表 | 性能 | 应用场景 |
|---|---|---|---|---|
| INNER JOIN | 两表匹配的行 | 小表驱动 | 最快 | 90% 场景,标准关联查询 |
| LEFT JOIN | 左表全部+ 右表匹配 | 强制左表驱动 | 中等 | 保留主表全部记录(如用户+订单) |
| RIGHT JOIN | 右表全部+ 左表匹配 | 强制右表驱动 | 中等 | 极少使用(可用 LEFT JOIN 改写) |
| FULL OUTER JOIN | 两表全部(MySQL 不支持) | 无 | 慢 | MySQL 用UNION模拟 |
| CROSS JOIN | 笛卡尔积(两表所有组合) | 无 | 极慢 | 生成组合数据、报表 |
| SELF JOIN | 表自关联 | 自身 | 中等 | 层级数据(组织架构、评论回复) |
特点
INNER JOIN 返回两个表中满足连接条件的行。如果某行在其中一个表中没有匹配项,则不会出现在结果中。
应用场景
示例
SELECTorders.order_id,customers.customer_nameFROMordersINNERJOINcustomersONorders.customer_id=customers.customer_id;特点
LEFT JOIN 返回左表中的所有行,即使右表中没有匹配的行。右表中无匹配的列会显示为 NULL。
应用场景
示例
SELECTcustomers.customer_name,orders.order_idFROMcustomersLEFTJOINordersONcustomers.customer_id=orders.customer_id;特点
RIGHT JOIN 返回右表中的所有行,即使左表中没有匹配的行。左表中无匹配的列会显示为 NULL。
应用场景
示例
SELECTorders.order_id,customers.customer_nameFROMordersRIGHTJOINcustomersONorders.customer_id=customers.customer_id;特点
FULL JOIN 返回左表和右表中的所有行,无匹配的列显示为 NULL。MySQL 不直接支持 FULL JOIN,但可通过 LEFT JOIN 和 RIGHT JOIN 的 UNION 实现。
应用场景
示例
SELECTcustomers.customer_name,orders.order_idFROMcustomersLEFTJOINordersONcustomers.customer_id=orders.customer_idUNIONSELECTcustomers.customer_name,orders.order_idFROMcustomersRIGHTJOINordersONcustomers.customer_id=orders.customer_id;特点
CROSS JOIN 返回两个表的笛卡尔积,即左表的每一行与右表的每一行组合。不依赖连接条件。
应用场景
示例
SELECTproducts.product_name,colors.color_nameFROMproductsCROSSJOINcolors;特点
自连接是表与自身的 JOIN 操作,通常用于层级数据查询(如员工与经理的关系)。
应用场景
示例
SELECTe1.employee_name,e2.employee_nameASmanager_nameFROMemployees e1LEFTJOINemployees e2ONe1.manager_id=e2.employee_id;