Oracle+SQL:经典查询练手四篇 下载本文

Oracle SQL:经典查询练手四篇

经典查询练手第一篇

本文使用的实例表结构与表的数据如下: scott.emp员工表结构如下:

Name Type Nullable Default Comments

-------- ------------ -------- ------- -------- EMPNO NUMBER(4) 员工号

ENAME VARCHAR2(10) Y 员工姓名 JOB VARCHAR2(9) Y 工作 MGR NUMBER(4) Y 上级编号 HIREDATE DATE Y 雇佣日期 SAL NUMBER(7,2) Y 薪金 COMM NUMBER(7,2) Y 佣金

DEPTNO NUMBER(2) Y 部门编号

scott.dept部门表

Name Type Nullable Default Comments

------ ------------ -------- ------- -------- DEPTNO NUMBER(2) 部门编号

DNAME VARCHAR2(14) Y 部门名称 LOC VARCHAR2(13) Y 地点

提示:工资=薪金+佣金 scott.emp表的现有数据如下:

SQL> select * from emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

7369 SMITH CLERK 7902 1980-12-17 800.00 20

7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30

7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30

7566 JONES MANAGER 7839 1981-4-2 2975.00 2

0

7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30

7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30

7782 CLARK MANAGER 7839 1981-6-9 2450.00 10

7788 SCOTT ANALYST 7566 1987-4-19 4000.00 20

7839 KING PRESIDENT 1981-11-17 5000.00 10

7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30

7876 ADAMS CLERK 7788 1987-5-23 1100.00 20

7900 JAMES CLERK 7698 1981-12-3 950.00 30

7902 FORD ANALYST 7566 1981-12-3 3000.00 20

7934 MILLER CLERK 7782 1982-1-23 1300.00 10

102 EricHu Developer 1455 2011-5-26 1 5500.00 14.00 10

104 huyong PM 1455 2011-5-26 1 5500.00 14.00 10

105 WANGJING Developer 1455 2011-5-26 1 5500.00 14.00 10

17 rows selected

Scott.dept表的现有数据如下: SQL> select * from dept;

DEPTNO DNAME LOC

------ -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 50abc 50def 60 Developer HaiKou

6 rows selected

用SQL完成以下问题列表:

1.列出至少有一个员工的所有部门。 2.列出薪金比“SMITH”多的所有员工。

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

5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门 6.列出所有“CLERK”(办事员)的姓名及其部门名称。 7.列出最低薪金大于1500的各种工作。

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

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

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

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

12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 13.列出在每个部门工作的员工数量、平均工资和平均服务期限。 14.列出所有员工的姓名、部门名称和工资。 15.列出所有部门的详细信息和部门人数。 16.列出各种工作的最低工资。

17.列出各个部门的MANAGER(经理)的最低薪金。 18.列出所有员工的年工资,按年薪从低到高排序。 各答案如下,欢迎大家给出不出的解答方式。

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

SQL> select dname from dept where deptno in(select deptno from emp); DNAME

-------------- RESEARCH SALES

ACCOUNTING

--------或--------

SQL> select dname from dept where deptno in(select deptno from emp group by deptno having count(deptno) >=1); DNAME

-------------- ACCOUNTING RESEARCH SALES

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

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

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

----- ---------- --------- ----- ----------- --------- --------- ------

7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30 7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30 7566 JONES MANAGER 7839 1981-4-2 2975.00 20

7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30 7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30 7782 CLARK MANAGER 7839 1981-6-9 2450.00 10 7788 SCOTT ANALYST 7566 1987-4-19 4000.00 20 7839 KING PRESIDENT 1981-11-17 5000.00 10

7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30 7876 ADAMS CLERK 7788 1987-5-23 1100.00 20 7900 JAMES CLERK 7698 1981-12-3 950.00 30 7902 FORD ANALYST 7566 1981-12-3 3000.00 20 7934 MILLER CLERK 7782 1982-1-23 1300.00 10

102 EricHu Developer 1455 2011-5-26 1 5500.00 14.00 10 104 huyong PM 1455 2011-5-26 1 5500.00 14.00 10

105 WANGJING Developer 1455 2011-5-26 1 5500.00 14.00 10 16 rows selected

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

SQL> select a.ename,(select ename from emp b where b.empno=a.mgr) as boss_name from emp a; ENAME BOSS_NAME

---------- ---------- SMITH FORD ALLEN BLAKE WARD BLAKE JONES KING MARTIN BLAKE BLAKE KING CLARK KING SCOTT JONES KING

TURNER BLAKE ADAMS SCOTT JAMES BLAKE FORD JONES MILLER CLARK EricHu huyong