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