8人参与 • 2025-12-13 • Mysql
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 返回两个表中满足连接条件的行。如果某行在其中一个表中没有匹配项,则不会出现在结果中。
应用场景
示例
select orders.order_id, customers.customer_name from orders inner join customers on orders.customer_id = customers.customer_id;
特点
left join 返回左表中的所有行,即使右表中没有匹配的行。右表中无匹配的列会显示为 null。
应用场景
示例
select customers.customer_name, orders.order_id from customers left join orders on customers.customer_id = orders.customer_id;
特点
right join 返回右表中的所有行,即使左表中没有匹配的行。左表中无匹配的列会显示为 null。
应用场景
示例
select orders.order_id, customers.customer_name from orders right join customers on orders.customer_id = customers.customer_id;
特点
full join 返回左表和右表中的所有行,无匹配的列显示为 null。mysql 不直接支持 full join,但可通过 left join 和 right join 的 union 实现。
应用场景
示例
select customers.customer_name, orders.order_id from customers left join orders on customers.customer_id = orders.customer_id union select customers.customer_name, orders.order_id from customers right join orders on customers.customer_id = orders.customer_id;
特点
cross join 返回两个表的笛卡尔积,即左表的每一行与右表的每一行组合。不依赖连接条件。
应用场景
示例
select products.product_name, colors.color_name from products cross join colors;
特点
自连接是表与自身的 join 操作,通常用于层级数据查询(如员工与经理的关系)。
应用场景
示例
select e1.employee_name, e2.employee_name as manager_name from employees e1 left join employees e2 on e1.manager_id = e2.employee_id;
到此这篇关于mysql各种 join 的特点及应用场景的文章就介绍到这了,更多相关mysql join特点内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论