MST

星途 面试题库

面试题:MySQL中如何根据业务场景选择合适的JOIN连接类型

假设你正在开发一个电商系统,有商品表(products)、订单表(orders)和订单详情表(order_items)。商品表包含商品ID、商品名称等字段;订单表包含订单ID、用户ID等字段;订单详情表包含订单ID、商品ID、购买数量等字段。现在要查询每个订单中商品的名称和购买数量,你会选择哪种JOIN连接类型,为什么?
23.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

在这种情况下,应该选择 INNER JOIN 连接类型。理由如下:

  1. 需求匹配:我们的需求是查询每个订单中商品的名称和购买数量,即获取有实际订单关联的商品信息。INNER JOIN 会返回两个表中满足连接条件的所有行,只有订单表和订单详情表、商品表之间存在匹配的关联数据时才会被包含在结果集中,能准确满足需求。例如,一个订单必然关联了具体的商品购买信息,INNER JOIN 能确保结果集里是真实存在订单关系的商品数据。
  2. 数据完整性INNER JOIN 不会返回没有订单关联的商品(即订单详情表中无对应订单ID和商品ID匹配项的商品),也不会返回没有关联商品的订单(即订单详情表中无对应订单ID匹配项的订单)。这保证了结果集中的数据是有实际业务关联的,对于电商系统中订单 - 商品关系的查询,这种数据完整性很重要。

SQL示例如下:

SELECT
    products.product_name,
    order_items.quantity
FROM
    orders
-- 通过订单ID连接订单表和订单详情表
INNER JOIN order_items ON orders.order_id = order_items.order_id
-- 通过商品ID连接订单详情表和商品表
INNER JOIN products ON order_items.product_id = products.product_id;