Oracle——数据查询例题

a、 查询出部门平均工资超过Smith所在部门平均工资的部门名称

  select dname
  from emp join dept on emp.deptno=dept.deptno
  group by emp.deptno,dname
  having avg(sal)>(select avg(sal) from emp where deptno=(select deptno from emp where ename='SMITH'));

注意不能像下面怎么写:

  select dname
  from emp join dept on emp.deptno=dept.deptno
  group by emp.deptno,dname
  having avg(sal)>(select avg(sal) from emp where ename='SMITH');
select avg(sal) from emp where ename='SMITH'
这条语句查询的是SMITH的平均工资,而不是所在部门的平均工资;

b、  显示比其上级管理员更早进入公司的雇员的姓名(Employee)、受雇日期(Emp Hiredate)以及其上级管理员的姓名(Manager)及受雇日期(Mgr Hiredate)。

  select a.ename as "Employee",a.hiredate "Emp Hiredate",b.ename as "Manager",b.hiredate "Mgr Hiredate"
  from emp a,emp b
  where a.hiredate<b.hiredate and a.mgr=b.empno;

注:列名取别名有两种方法:1.列名 as 别名  2.列名 别名

       表取表名不能使用as,只能使用 列名 别名

 

c、 多行子查询

      在工资前3名的职工所在部门中查询工资最高的职工

   select *
   from emp
   where sal=(select max(sal) from emp where deptno in (select deptno from(select * from emp order by sal desc) where rownum<=3)); 

 

d、多列子查询

      查询出和Smith同部门、职务也相同的职工

  select *
  from emp
  where (deptno,job) in (select deptno,job from emp where ename='SMITH');

 

posted @ 2017-10-15 22:42  Queenayao  阅读(320)  评论(0编辑  收藏  举报