use BBB;
--工资大于员工SMITH的所有人
--select * from emp where sal>(select sal from emp where ename='SMITH');
--列出员工姓名和员工上级的姓名
--select e1.ename,e2.ename 上级 from emp e1,emp e2 where e1.mgr=e2.empno;
--列出员工入职日期晚于其上级的员工
--select e1.ename,e1.hiredate,e2.ename 上级,e2.hiredate from emp e1,emp e2 where e1.mgr=e2.empno and e1.hiredate>e2.hiredate;
--列出部门信息和部门的所有员工,没有员工的部门信息也要列出
--select * from emp right join dept on dept.deptno=emp.deptno
--列出各部门底薪最低的工作
--select min(sal),job from emp group by job;
--列出各部门最低薪金大于1500的所有工作
--select min(sal),job from emp group by job having min(sal)>1500;
--列出所有部门员工平均工作年限
--select avg(datediff(year,hiredate,getdate())) 平均工作多久,deptno from emp group by deptno;
--列出同种工作不同部门的员工组合
--自连接条件,e1.job=e2.job,e1.deptno<>e2.deptno,e1.empno<>e2.empno(排除自己),e1抛出条件在e2中,如果这个工作只有本部门有怎么办
--select e2.ename,e2.job,e2.deptno from emp e1 left join emp e2 on e1.job=e2.job and e1.deptno<>e2.deptno and e1.empno<>e2.empno
--列出部门详细信息和人数
--分析:先统计出各部门人数作为一个临时表
select count(*) c,deptno from emp group by deptno;
select d.deptno,d.dname,d.loc,isnull(e.c,0) 部门人数 from dept d left join (select count(*) c,deptno from emp group by deptno) e on d.deptno=e.deptno;
select * from dept;