SQL基本查询操作以及答案2

使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下

emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)

dept部门表(deptno部门编号/dname部门名称/loc地点)

工资 = 薪金 + 佣金

1.列出至少有一个员工的所有部门。

select  deptno  from emp group by deptno having count(empno)>1 ;

2.列出薪金比“SMITH”多的所有员工。

select empno  from emp  where sal> (select  sal  from  emp  where  ename ='SMITH');

3.列出所有员工的姓名及其直接上级的姓名。


select a.ename,
(select ename from emp where empno= a.mgr) mgrname from emp a;

自连接
select a.ename,b.ename mgrname from emp a,emp b
where a.mgr = b.empno;


4.列出受雇日期早于其直接上级的所有员工。

    select   a.empno ,a.ename  from emp a,emp b
where a.mgr = b.empno  and  (b.hiredate-a.hiredate)>0;

5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

  select  dname,empno,ename,job,mgr,hiredate,sal,comm   from emp , dept  where  emp.deptno(+) = dept.deptno;
6.列出所有“CLERK”(办事员)的姓名及其部门名称。

  select ename,dname from emp,dept  where    emp.deptno=dept.deptno and job='CLERK';

7.列出最低薪金大于1500的各种工作。

    select distinct job  from emp group by job   having  min(sal)>1500;
8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
     select ename  from emp,dept  where  emp.deptno(+)=dept.deptno  and dname='SALES';

9.列出薪金高于公司平均薪金的所有员工。

   select empno,ename  from emp where  sal> (select avg(sal) from emp);

10.列出与“SCOTT”从事相同工作的所有员工。

   select empno,ename  from emp  where  job=(select job  from emp where ename='SCOTT') and ename !='SCOTT';


11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

    select ename,sal  from emp  where sal in (select sal  from emp  where deptno='30') and deptno !='30';

12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

      select ename,sal  from emp where sal>(select sum(sal)  from emp where deptno='30');
13.列出在每个部门工作的员工数量、平均工资和平均服务期限。
 
  select count(empno),avg(sal) ,deptno ,avg((sysdate - hiredate)/365) from emp  group by deptno;

14.列出所有员工的姓名、部门名称和工资。

select ename,dname ,sal+nvl(emp.comm,0)  from emp,dept where emp.deptno=dept.deptno;


15.列出从事同一种工作但属于不同部门的员工的一种组合。

    select a.ename,b.ename
    from emp a,emp b
    where a.job=b.job and a.deptno!=b.deptno and a.ename!=b.ename;


////////16.列出所有部门的详细信息和部门人数。

   select a.*,(select count(*) from emp where deptno = a.deptno) rs from dept a;

17.列出各种工作的最低工资。
  
    select min(nvl(sal+comm,sal)) ,job  from emp  group  by job;

18.列出各个部门的MANAGER(经理)的最低薪金。

select min(sal) ,deptno  from emp  where  job='MANAGER'  group by deptno 

19.列出所有员工的年工资,按年薪从低到高排序。

    select   12* nvl(sal+comm,sal) from emp  order by  sal asc;

-----orcle的等连接
SELECT * FROM EMP E ,DEPT D WHERE E.DEPTNO=D.DEPTNO;
-----orcla的外连接
SELECT * FROM EMP E ,DEPT D WHERE E.DEPTNO(+)=D.DEPTNO;
+放在没有匹配行的表一侧,所以dept表的记录完全显示

你可能感兴趣的:(sql,工作)