SQL面试题更新 2026-08-05

请写出一条 SQL 语句,用于获取每个订单对应的商品明细,输出中需要包含商品 ID、购买数量、商品单价以及该商品在该订单中的总金额。

编码实现SQL

考察说明

考查对 SQL 多表连接查询和基础计算的掌握,以及字段选择和聚合运算能力。

回答思路

  1. 【回答框架 1】首先需要确认数据表结构:通常会有订单表(orders)和订单明细表(order_items),订单明细表包含订单号、商品 ID、数量、单价。若存在商品表(products),可通过商品 ID 连接获取商品名称等其他信息。
  2. 【回答框架 2】核心查询是使用 JOIN 连接订单表和订单明细表,连接条件为订单号相等。若需要商品名称,再连接商品表。选择列时明确使用表别名避免歧义,例如选择 i.item_id, i.quantity, i.price。
  3. 【回答框架 3】总金额的计算公式为 数量 * 单价,在 SQL 中可直接计算并给别名,如 i.quantity * i.price AS total_amount。需要注意单价字段类型应为数值型,避免隐式转换问题。
  4. 【回答框架 4】若考虑可能存在优惠或折扣,需根据实际表结构调整计算逻辑;本例仅基于给定字段进行简单乘法。还应确保连接条件正确,避免笛卡尔积。
  5. 【回答框架 5】完整 SQL 示例:SELECT o.order_id, i.item_id, i.quantity, i.price, i.quantity * i.price AS total_amount FROM orders o JOIN order_items i ON o.order_id = i.order_id; 按需添加其他字段。
  6. 【关键点 1】使用 INNER JOIN 连接订单和明细表,关联字段为订单号。
  7. 【关键点 2】总金额通过数量乘以单价计算,注意字段类型。
  8. 【关键点 3】选择字段时使用表别名避免歧义,提高可读性。
  9. 【易错点 1】若未指定连接条件,会产生笛卡尔积,数据错误。
  10. 【易错点 2】忽略字段类型,导致计算错误或隐式转换性能问题。
  11. 【易错点 3】未考虑折扣或优惠,总金额计算不准确(若实际存在)。