ORACLE SQL:经典查询练手第五篇

2014-11-24 11:29:42 · 作者: · 浏览: 0

本文与大家共同讨论与分享ORACLE SQL的一些常用经典查询,欢迎大家补充,同时你认为有那些经典的也可分享出来。在本文中,对每一个问题,你要是认为有什么更好的解决方法也欢迎你及时提出。交流与分享才能共同进步嘛,感谢!

接上四篇:

[推荐]ORACLE SQL:html">经典查询练手第一篇

[推荐]ORACLE SQL:经典查询练手第二篇

[推荐]ORACLE SQL:经典查询练手第三篇

[推荐]ORACLE SQL:经典查询练手第四篇

本篇数据查询属于复杂业务,难度比较高,请继续努力,通过我为大家设立的这个系列,循序渐进,只要你对每一篇,每一个试题都实践测试,认真练习。我相信你对常用、经典的、复杂的SQL已能熟能生巧,信手拈来!


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


本文使用ORACLE自带的人力资源(HR)实例数据,本文所用表结构如下:
表名:REGIONS

序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明

1
REGION_ID
NUMBER








2
REGION_NAME
VARCHAR2
25






表名:COUNTRIES

序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明

1
COUNTRY_ID
CHAR
2







2
COUNTRY_NAME
VARCHAR2
40







3
REGION_ID
NUMBER







表名:LOCATIONS

序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明

1
LOCATION_ID
NUMBER
4
0






2
STREET_ADDRESS
VARCHAR2
40







3
POSTAL_CODE
VARCHAR2
12







4
CITY
VARCHAR2
30







5
STATE_PROVINCE
VARCHAR2
25







6
COUNTRY_ID
CHAR
2






表名:DEPARTMENTS

序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明

1
DEPARTMENT_ID
NUMBER
4
0






2
DEPARTMENT_NAME
VARCHAR2
30







3
MANAGER_ID
NUMBER
6
0






4
LOCATION_ID
NUMBER
4
0





表名:JOBS

序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明

1
JOB_ID
VARCHAR2
10







2
JOB_TITLE
VARCHAR2
35







3
MIN_SALARY
NUMBER
6
0






4
MAX_SALARY
NUMBER
6
0





表名:EMPLOYEES

序号
列名
数据类型
长度
小数位
标识
主键
允许空
默认值
说明

1
EMPLOYEE_ID
NUMBER
6
0






2
FIRST_NAME
VARCHAR2
20







3
LAST_NAME
VARCHAR2
25







4
EMAIL
VARCHAR2
25







5
PHONE_NUMBER
VARCHAR2
20







6
HIRE_DATE
DATE
7







7
JOB_ID
VARCHAR2
10







8
SALARY
NUMBER
8
2






9
COMMISSION_PCT
NUMBER
2
2






10
MANAGER_ID
NUMBER
6
0






11
DEPARTMENT_ID
NUMBER
4
0






ER图:


用SQL完成以下问题列表:

1. 哪些部门的人数比90 号部门的人数多。
2. Den(FIRST_NAME)、Raphaely(LAST_NAME)的领导是谁(非关联子查询)。
3. Den(FIRST_NAME)、Raphaely(LAST_NAME) 领导谁(非关联子查询)。
4. Den(FIRST_NAME)、Raphaely(LAST_NAME) 的领导是谁(关联子查询)。
5. Den(FIRST_NAME)、Raphaely(LAST_NAME) 领导谁(关联子查询)。
6. 列出在同一部门共事,入职日期晚但工资高于其他同事的员工:名字、工资、入职日期
(关联子查询)。
7. 哪些员工跟Den(FIRST_NAME)、Raphaely(LAST_NAME)不在同一个部门(非关联子查询)。
8. 哪些员工跟Den(FIRST_NAME)、Raphaely(LAST_NAME)不在同一个部门(关联子查询)。
9. Finance部门有哪些职位(非关联子查询)。
10. Finance部门有哪些职位(关联子查询)。

各试题解答如下(欢迎大家指出不同的方法或建议!):

/*--------1、哪些部门的人数比90号部门的人数多。---------*/

SQL> SELECT DEPARTMENT_ID,COUNT(*) FROM EMPLOYEES
2 GROUP BY DEPARTMENT_ID
3 HAVING COUNT(*) >
4 (SELECT COUNT(*) FROM EMPLOYEES
5 WHERE DEPARTMENT_ID = 90
6 );

DEPARTMENT_ID COUNT(*)
------------- ----------
30 6
50 45
60 5
&nb