以下是四种数据库连接方式的通俗解析,用日常场景类比帮助理解:


1. 内连接(INNER JOIN)

比喻‌:严格的双向相亲会

  • 规则‌:只有双方互相看对眼的才能配对成功(两表匹配字段值完全相同)
  • 结果‌:仅显示‌共同存在‌的数据(如学生表和成绩表匹配后,只显示有成绩的学生)
  • 应用场景‌:查询已售出的商品详情(排除未下单的商品)‌

2. 左连接(LEFT JOIN)

比喻‌:霸道总裁式招聘

  • 规则‌:左表全员录用,右表没有匹配的用NULL占位(如坚持保留所有客户,哪怕他们未消费)
  • 结果‌:左表数据‌全部保留‌,右表缺失数据用NULL填充
  • 应用场景‌:客服系统需查看所有客户信息(包括未投诉的客户)‌

3. 右连接(RIGHT JOIN)

比喻‌:粉丝见面会

  • 规则‌:右表偶像全员出席,左表粉丝没票的用NULL(如显示所有产品,即使无销售记录)
  • 结果‌:右表数据‌全部保留‌,左表缺失数据用NULL填充
  • 应用场景‌:库存管理系统需显示所有商品(包括滞销品)‌

4. 全连接(FULL JOIN)

比喻‌:民政局婚姻登记处

  • 规则‌:左右两表所有记录都会出现,没匹配的用NULL(如同时列出所有学生和所有成绩,不管是否匹配)
  • 结果‌:‌两表数据合并‌,缺失部分自动补NULL
  • 注意‌:MySQL需通过LEFT JOIN UNION RIGHT JOIN模拟实现‌

对比总结

连接类型 保留哪边数据 NULL处理 使用频率
内连接 仅匹配成功的数据 不保留 高(严格过滤)
左连接 左表全部 右表补NULL 较高
右连接 右表全部 左表补NULL 较低
全连接 两表全部 双向补NULL 低(需模拟)

小技巧:想象左表是「公司员工名单」,右表是「工资表」——
内连接=只发工资的员工,左连接=全员名单(没工资的留空),右连接=所有工资记录(没对应员工的留空)‌

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐