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