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');