基本SQL查询语句

使用Emp表和Dept表完成下列练习

Emp员工表

empno

ename

job

Mgr

Hiredate

Sal

Comm

Deptno

员工号

员工姓名

工作

上级编号

受雇日期

薪金

佣金

部门编号

Dept表

Deptno

Dname

Loc

部门编号

部门名称

地点

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

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

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

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

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

6.列出所有“CLERK”(办事员)的姓名及其部门名称。

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

8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

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

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

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

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

13.列出在每个部门工作的员工数量、平均工资和平均服务期限。

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

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

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

17.列出各种工作的最低工资。

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

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

  1 1.
  2 select distinct dname
  3 from dept 
  4 where deptno in 
  5           (select distinct deptno 
  6            from emp);
  7 --要查部门编号如果存在于emp 表中,说明这个部门有员工。
  8 2.
  9 select ename,job,mgr,hiredate,sal
 10 from emp
 11 where sal>
 12         (select sal
 13          from emp
 14          where ename='SMITH');
 15 3.
 16 select e.ename, e.mgr , w.ename
 17 from emp e, emp w
 18 where e.mgr=w.empno;
 19 4.
 20 select e.ename, e.mgr , e.hiredate,w.ename,w.hiredate
 21 from emp e, emp w
 22 where e.mgr=w.empno
 23 and e.hiredate< w.hiredate;
 24 5.
 25 select e.ename,e.hiredate, d.dname,d.deptno
 26 from emp e, dept d
 27 where e.deptno (+)=d.deptno;
 28 --本例子使用的是外连接, 也可以用右连接。
 29 select e.ename,e.hiredate, d.dname,d.deptno
 30 from emp e right join dept d 
 31 on e.deptno=d.deptno;
 32 6.
 33 select e.ename,e.hiredate,e.job, d.dname,d.deptno
 34 from emp e, dept d
 35 where e.deptno =d.deptno
 36 and e.job=upper('clerk');
 37 7.
 38 select job, min(sal)
 39 from emp
 40 group by job
 41 having min(sal)>1500;
 42 8.
 43 select e.ename,d.dname
 44 from emp e,dept d
 45 where e.deptno=d.deptno
 46 and d.dname=upper('sales');
 47 --或者:
 48 select ename
 49 from emp 
 50 where deptno =
 51       (select deptno 
 52        from dept
 53        where dname=upper('SALES'));
 54 9.
 55 select ename, job, sal
 56 from emp
 57 where sal> 
 58         (select avg(sal)
 59          from emp );
 60 10.
 61 select ename, job
 62 from emp
 63 where job =
 64        (select job 
 65         from emp 
 66         where ename=upper('scott'));
 67 11.
 68 select ename, sal,job
 69 from emp
 70 where sal in
 71        (select sal
 72         from emp 
 73         where deptno=30);
 74 12.
 75 select ename, sal,job
 76 from emp
 77 where sal >all
 78        (select sal
 79         from emp 
 80         where deptno=30);
 81 --或者
 82 select ename ,sal 
 83 from emp 
 84 where sal>
 85        (select max(sal)
 86         from emp
 87         where deptno=30);
 88 13.
 89 select d.deptno,d.dname, count(e.ename), avg(e.sal), avg(months_between(sysdate,e.hiredate))
 90 from emp e, dept d
 91 where e.deptno(+)= d.deptno
 92 group by d.deptno,dname;
 93 --或者下面的方法,这种方法更好理解,把需要汇总的生成一个视图e。
 94 select e.*,d.dname ,
 95 from (select deptno, count(ename) ,avg(sal),avg(months_between(sysdate,hiredate)) 
 96       from emp 
 97       group by deptno) e, dept d
 98 where e.deptno =d.deptno;
 99 14.
100 select d.dname, e.ename, sal+nvl(comm,0)
101 from emp e, dept d
102 where d.deptno=e.deptno;
103 15.
104 select e.ename,e.job, e.deptno ,d.job, d.deptno
105 from emp e, emp d
106 where e.job=d.job and e.deptno<>d.deptno;
107 16.
108 select count(e.ename),d.dname
109 from emp e, dept d
110 where e.deptno(+)= d.deptno
111 group by e.deptno,d.dname;
112 --或者写成
113 select d.deptno,e.*,d.dname 
114 from (select deptno,count(ename) 
115      from emp 
116      group by deptno) e,dept d
117 where e.deptno(+)= d.deptno;
118 17.
119 select job,min(sal+nvl(comm,0))from emp group by job;
120 18.
121 select deptno,min(sal) from emp where job=upper('manager')
122 group by deptno ;
123 19.
124 select ename , (sal+nvl(comm,0))*12   yearsal
125 from emp
126 order by yearsal ;

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/nqdxt/p/11418929.html