emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)
dept部门表(deptno部门编号/dname部门名称/loc地点)
工资=薪金+佣金
列出至少有一个员工的所有部门。
select *from dept where deptno in(select distinct deptno from emp);
distinct本身就有一个意思:
如果有多个,那么只当成一个来算。
-法二 select * from dept where dept.deptno in (select deptno from emp group by deptno);
我用的也是group by
不过我的写法是select deptno ,sum(ename) from emp group by deptno having sum(ename)>0;
其实分组不一定要用到聚合函数,select deptno from emp group by deptno也是可以的。
自表关联
列出所有员工的姓名及其直接上级的姓名。
-- 员工姓名 select ename from emp
-- 上级姓名 select boss.ename from emp work,emp boss where boss.empno = work.mgr; -
-列出所有员工的姓名及其直接上级的姓名。
select work.ename, boss.ename from emp work,emp boss where boss.empno = work.mgr;
--法二 select ename,(select ename from emp where empno = e.mgr) from emp e;
列出至少有一个员工的所有部门。
select *from dept where deptno in(select distinct deptno from emp);