本文共 2366 字,大约阅读时间需要 7 分钟。
本章将深入探讨MySQL中的复合查询与多表查询,特别是通过子查询和笛卡尔积的方式,轻松应对实际工作中的复杂数据问题。
在实际开发中,单表查询显然远远不够。需要通过复合查询来处理多表数据。
select * from emp where sal > 500 or job = 'MANAGER'
select ename from emp where substring(ename,1,1) = 'J'
select * from emp order by deptno asc, sal desc
确保年薪计算无异常:
select sal * 12 + ifnull(comm, 0) as annual_salary from emp
最终排序:
select * from emp order by annual_salary desc
select max(sal) from emp
select ename, job from emp where sal = (select max(sal) from emp)
平均工资计算:
select avg(sal) from emp
筛选工资高于平均工资的雇员:
select * from emp where sal > (select avg(sal) from emp)
通过group by
实现:
select deptno, max(sal), avg(sal) from emp group by deptno
更详细显示:
select deptno, max(sal), avg(sal) from emp group by deptno having deptno != 10
select deptno, avg(sal) from emp group by deptno having avg(sal) < 2000
select job, count(empno), avg(sal) from emp group by job
select ename, sal, dname from emp, dept where emp.deptno = dept.deptno and dept.deptno = 10
select dname, count(empno), round(avg(sal), 2) from dept, emp where dept.deptno = emp.deptno group by dname
创建中间表salgrade
并处理:
select ename, sal, dname, job from emp, dept where emp.deptno = dept.deptno
显示FORD的上级领导信息:
select mgr from emp where ename = 'FORD'select ename, empno from emp where ename = (select mgr from emp where ename = 'FORD')
显示Smith同一部门的雇员:
select * from emp where deptno = (select deptno from emp where ename = 'Smith')
查询与10号部门岗位相同的雇员:
select ename, job, sal, deptno from emp where deptno != 10 and job in (select distinct job from emp where deptno = 10)
显示每个部门高于平均工资的雇员:
select deptno, ename, sal, avg_sal from emp, (select deptno, avg(sal) as avg_sal from emp group by deptno) tmp where emp.deptno = tmp.deptno and emp.slab > tmp.avg_sal
显示工资高于部门30的任意雇员:
select * from emp where sal > (select max(sal) from emp where deptno = 30)
查询岗位完全相同的雇员:
select ename, deptno, job from emp where ename in (select ename from emp where job = 'developer')
显示工资大于2500或职位为MANAGER的雇员:
select ename, job from emp where sal > 2500 or job = 'MANAGER' union allselect ename, job from emp where sal > 2500 or job = 'MANAGER'
注意结果列完整性,适用于可重复的数据:
转载地址:http://jdzfk.baihongyu.com/