1. MySQL多表查询实战指南
作为一名数据库开发人员,我经常需要处理复杂的查询需求。在实际项目中,单表查询往往无法满足业务需求,多表查询才是常态。今天我就来分享MySQL中多表查询的各种技巧和实战经验。
多表查询是数据库操作中最核心的技能之一,它允许我们从多个表中提取和组合数据,形成更有价值的查询结果。根据不同的业务场景,我们可以选择联合查询、连接查询、自连接或子查询等不同方式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 联合查询:合并结果集的艺术
2.1 UNION与UNION ALL的区别
联合查询主要用于合并两个或多个SELECT语句的结果集。在实际应用中,我们最常用的是UNION和UNION ALL两种方式:
sql复制-- UNION示例:合并并去重
SELECT * FROM employees WHERE department = 'IT'
UNION
SELECT * FROM employees WHERE salary > 10000;
-- UNION ALL示例:合并但不去重
SELECT * FROM employees WHERE department = 'IT'
UNION ALL
SELECT * FROM employees WHERE salary > 10000;
注意:使用UNION时,所有查询的列数和列类型必须一致,否则会报错。这是新手常犯的错误之一。
我在实际项目中发现,UNION ALL的性能通常比UNION更好,因为它不需要执行去重操作。如果确定结果集不会有重复,或者重复数据不影响业务逻辑,优先使用UNION ALL。
2.2 实现交集和差集
虽然MySQL没有直接提供交集(INTERSECT)和差集(EXCEPT)操作符,但我们可以通过子查询模拟实现:
sql复制-- 交集:同时满足两个条件的记录
SELECT * FROM table_a
WHERE id IN (SELECT id FROM table_b);
-- 差集:在A中但不在B中的记录
SELECT * FROM table_a
WHERE id NOT IN (SELECT id FROM table_b);
对于大型数据集,NOT IN的性能可能不佳。这时可以考虑使用LEFT JOIN配合IS
