*scott账户自带的三张表结构分析.
emp表:
EMPNO雇员编号(某某雇员的上级也是雇员)
ENAME雇员姓名
JOB雇员职位
MGR雇员上级编号
HIREDATE雇员雇佣起始日期
SAL雇员工资
COMM雇员奖金
DEPTNO雇员所在部门编号
dept表:
DEPTNO部门编号
DNAME部门名称
LOC部门所在地址
salgrade表:
GRADE工资等级
LOSAL最低工资
HISAL最高工资
(1)如图所示命令 select worker.ename||'的上级是'||boss.ename,boss.empno,worker.mgr from emp boss,emp worker where boss.empno=worker.mgr;是将emp表取两个别名,把一张表看成两张表,这样就可以轻松查出每个人的上级是谁,我们称之为自连接.
(2)select ename from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');查询工作与部门都与SMITH相同的人的姓名.
(3)select emp.ename,emp.sal,t1.sal,emp.deptno,t1.deptno from emp,(select avg(emp.sal) sal,deptno from emp group by deptno) t1 where emp.deptno=t1.deptno and emp.sal>t1.sal;
这条查询命令from中的t1是一次查询结果的别名,select avg(emp.sal),deptno from emp group by deptno;是为了查询出每个部门的平均工资与部门号,为了查询出比自己部门平均工资高的员工就必须先查询出当前每个部门的平均工资,而带着deptno是为了与emp表产生关联.最终查询结果如上图所示.它的思想主要就是把一次查询结果当做一张临时的表来看待.
(4)这是第三点大神们的另一种写法select e1.* from emp e1 where e1.sal>(select avg(sal) sal from emp where deptno=e1.deptno);这种写法也可以达到第三点的目的但是缺点是不能显示where中查询的结果.