1,请查询表DEPT中所有部门的情况。


SCOTT@orcl 07-APR-14> select * from dept;


2,查询表DEPT中的部门号,部门名称两个字段的所有信息。


SCOTT@orcl 07-APR-14> select deptno,dname from dept;


3,请从表EMP中查询10号部门工作的雇员姓名和工资。


SCOTT@orcl 07-APR-14> select ename,sal from emp where deptno=10;


4,请从表EMP中查找工种是职员CLERK或经理MANAGER的雇员姓名,工资。


SCOTT@orcl 07-APR-14> select ename,sal from emp where job in ('CLERK','MANAGER');


5,请在EMP表中查找部门号在10-30之间的雇员的姓名,部门号,工资,工作。


select ename,deptno,sal,job from emp where deptno >10 and deptno <30;


6,请从表EMP中查找姓名以J开头所有雇员的姓名,工资,职位。


select ename,sal,job from emp where ename like 'J%';


7,请从表EMP中查找工资低于2000的雇员的姓名,工作,工资,并按工资降序排列。


select ename,job,sal from emp where sal < 2000 order by sal desc;


8,请从表中查询工作是CLERK的所有人的姓名,工资,部门号,部门名称以及部门地址的信息。


select a.ename,a.sal,a.deptno,b.dname,b.loc from emp a join dept b on a.deptno=b.deptno where a.job='CLERK';


9,查询表EMP中所有的工资大于等于2000的雇员姓名和他的经理的名字。


select a.ename emp_name,a.sal,b.ename manager_name from emp a join emp b on a.mgr=b.empno where a.sal >= 2000;


10,在表EMP中查询所有工资高于JONES的所有雇员姓名,工作和工资。


select ename,job,sal from emp  where sal > (select sal JONES_sal from emp where ename='JONES');


12,查找工资在1000~3000之间的雇员所在部门的所有人员信息。


SCOTT@orcl 07-APR-14> select * from emp where deptno in (select deptno from emp where sal > 1000 and sal < 3000 group by deptno);


13,雇员中谁的工资最高。


---第一种方法

select ename,sal from emp where sal in (select max(sal) from (select ename,sal from emp where mgr is not null));


---第二种方法

select * from (select ename,sal,dense_rank() over (order by sal desc) rn from emp) where rn=1;


14,雇员中谁的工资第二高


---第一种方法

select ename,sal from emp where sal=(select max(sal) from  (select sal from emp minus select max(sal) from emp));


---第二种方法

select ename,sal from (select ename,sal,dense_rank() over (order by sal desc) rn from emp) where rn=2 ;


15,查询所有雇员的姓名,SAL与COMM之和。


select ename,sal+nvl(comm,0) total_sal from emp;


16,查询所有81年7月1日以前来的员工姓名,工资,所属部门的名字


select a.ename,a.sal,a.hiredate,b.dname from emp a join dept b on a.deptno=b.deptno where to_char(a.hiredate) < '1981-07-01';


17,查询各部门中81年1月1日以后来的员工数


////第一种方法

select deptno,count(deptno) counts from emp where to_char(hiredate) > '1981-01-01' group by deptno;


//第二种方法

select deptno,count(deptno) counts from emp where hiredate > to_date('1981-01-01','yyyy-mm-dd') group by deptno;


18,查询所有在CHICAGO工作的经理MANAGER和销售员SALESMAN的姓名,工资


select ename,sal,job from emp where deptno in (select deptno from dept where loc='CHICAGO') and job in ('SALESMAN','MANAGER');


19,查询列出来公司就职时间超过24年的员工名单


select ename,hire_time from (select ename,round((to_date(sysdate)-hiredate)/365,2) hire_time from emp) where hire_time > 24;


select ename from emp where hiredate <= add_months(sysdate,-288);


20,询于81年来公司所有员工的总收入(包括SAL和COMM)


alter session set NLS_DATE_FORMAT = "yyyy-mm-dd";

select sum(total_sal) from  (select ename,hiredate,(sal+nvl(comm,0))*12 total_sal from emp where hiredate >= '1981-01-01' and  hiredate < '1982-01-01');


select sum(sal+nvl(comm,0))*12 sum_year from emp where to_char(hiredate,'yyyy')='1981';


21,查询显示每个雇员加入公司的准确时间,按yyyy-mm-dd hh24:mi:ss显示。


select ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') hiredate  from emp;


22,查询公司中按年份月份统计各地的录用职工数量


---按年份统计各地的录用职工数量

select hire_year,count(*),loc from  (select a.ename,a.deptno,to_char(a.hiredate,'yyyy') hire_year,b.loc from emp a join dept b on a.deptno=b.deptno) group by hire_year,loc;


---按年份月份统计各地的录用职工数量

select hire_year_months,count(*),loc from  (select a.ename,a.deptno,to_char(a.hiredate,'yyyy-mm') hire_year_months,b.loc from emp a join dept b on a.deptno=b.deptno) group by hire_year_months,loc;


select to_char(a.hiredate,'yyyy-mm') hiredate,b.loc,count(*) counts  from emp a join dept b on a. =b. group by to_char()


23查询列出各部门的部门名和部门经理名字


select a.ename,b.dname from (select ename,job,deptno from emp where job='MANAGER') a join dept b on a.deptno=b.deptno;


24,查询部门平均工资最高的部门名称和最低的部门名称


select b.dname,a.avg_sal from

(select deptno,avg_sal from

(select deptno,round(avg(sal),2) avg_sal from emp group by deptno)

where avg_sal=(select max(avg_sal) max_avg_sal from (select deptno,round(avg(sal),2) avg_sal from emp group by deptno)) or avg_sal=(select min(avg_sal) min_avg_sal from (select deptno,round(avg(sal),2) avg_sal from emp group by deptno)

)) a join  dept b on a.deptno=b.deptno;


25,查询与雇员号为7521员工的最接近的在其后进入公司的员工姓名及其所在部门名


select a.ename,b.dname from


(select ename,deptno,empno,empno-7521 minu_empno from emp) a


join dept b on a.deptno=b.deptno


where a.minu_empno = (select min(minu_empno) from (select ename,empno,empno-7521 minu_empno from emp) where minu_empno>0)

;