1. MySQL复合查询与内外连接实战指南
作为一名数据库工程师,我经常需要处理复杂的多表查询场景。今天我将分享MySQL中复合查询和内外连接的实战经验,这些技巧在实际业务场景中非常实用,尤其在处理员工管理、部门统计等常见需求时。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础查询回顾与优化技巧
2.1 条件组合查询实战
在员工管理系统中,我们经常需要组合多个条件进行筛选。比如查找工资高于500或岗位为MANAGER,且姓名以J开头的员工:
sql复制SELECT * FROM emp
WHERE (sal > 500 OR job = 'MANAGER')
AND ename LIKE 'J%';
注意:在MySQL中,LIKE 'J%'的性能通常优于SUBSTRING函数,因为LIKE可以利用索引。当ename字段有索引时,这种写法效率更高。
2.2 排序策略与性能考量
多字段排序是业务中的常见需求,例如按部门号升序、工资降序排列:
sql复制SELECT ename, sal, deptno FROM emp
ORDER BY deptno ASC, sal DESC;
性能提示:对于大数据表,确保deptno和sal字段有复合索引可以显著提升排序性能。EXPLAIN分析显示,没有合适索引时会出现filesort操作,影响性能。
2.3 年薪计算与NULL处理陷阱
计算年薪时需要特别注意NULL值处理:
sql复制SELECT ename, sal, comm,
sal*12+IFNULL(comm,0) AS annual_salary
FROM emp
ORDER BY annual_salary DESC;
关键点:NULL与任何值运算结果都是NULL。IFNULL(comm,0)确保计算正确,也可以使用COALESCE(comm,0)实现相同效果。
3. 多表查询原理与实战
3.1 笛卡尔积的本质与优化
多表查询的基础是笛卡尔积,但实际业务中我们需要通过条件过滤无效组合:
sql复制SELECT e.ename, e.sal, d.dname
FROM emp e, dept d
WHERE e.deptno = d.
