在日常工作中,处理数据是免不了的事。比如你在公司做销售分析,手头有两张表:一张是订单表 orders,记录每笔订单的金额;另一张是客户表 customers,存着客户的基本信息。现在你想查出每个客户的订单总额,这就得把两个表“合”起来查,也就是常说的 SQL 查询两表合并。
用 JOIN 连接两张表
最常用的合并方式就是 JOIN。假设订单表里有个字段 customer_id 对应客户表的 id,你可以这样写:
SELECT c.name, o.amount
FROM customers c
JOIN orders o ON c.id = o.customer_id;
这条语句的意思是:从客户表和订单表中,找出客户 ID 相同的记录,把名字和订单金额一起显示出来。如果某个客户没下过单,那他不会出现在结果里,因为这是内连接(INNER JOIN)。
保留所有客户?用 LEFT JOIN
要是你希望哪怕没订单的客户也列出来,就把 JOIN 换成 LEFT JOIN:
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id;
这时候,所有客户都会出现,没订单的对应字段显示为 NULL。比如你做月度报表时要核对客户覆盖率,这种写法就特别有用。
合并结果去重?试试 UNION
有时候不是按关联字段拼表,而是想把两个结构相似的查询结果叠在一起。比如你有两个门店的销售记录表 sales_north 和 sales_south,都包含 product 和 quantity 字段,想汇总所有销量:
SELECT product, quantity FROM sales_north
UNION ALL
SELECT product, quantity FROM sales_south;
UNION ALL 会保留重复行,如果想去掉重复,可以用 UNION。这就像把两份 Excel 表格内容直接堆到一起,再统一处理。
注意字段匹配和性能
用 JOIN 的时候,别忘了确保关联字段类型一致。比如一个字段是整数,另一个是字符串,即使值一样也可能连不上。另外,大表连接容易慢,给 ON 后面的字段加索引能明显提速。就像快递分拣线,有编号才能快速配对包裹和收件人。
实际写查询时,可以先用 LIMIT 查几条看看结构对不对,确认无误再跑全量数据。小步快跑,比一口气执行完发现错了还得重来强得多。