[置顶] Oracle SQL 经典查询练手第四篇

Oracle SQL 经典查询练手第四篇

本文分享的是OracleSQL的经典查询第四篇,仅仅是作者自己的见解,如有问题,希望您给出建议或者方法。同时,欢迎广大读者们补充,如果您有经典的查询方式也可以拿出来我们共同分享,共同成长,共同进步。

本计算机上使用的是Oracle11.2.0版本,使用scott用户登陆。使用的是系统自带的表。

表结构:

describe employees;

[置顶] Oracle SQL 经典查询练手第四篇_第1张图片

describe departments;

describe locations;


select from employees;(由于空间限制,此表的行和列都没有截取全部,一共107行,11列)

[置顶] Oracle SQL 经典查询练手第四篇_第2张图片

select from departments;(由于空间限制,此表的列截取了全部,行没有截取全部,一共27

[置顶] Oracle SQL 经典查询练手第四篇_第3张图片

select from locations;

由于空间限制,此表的行和列都没有截取全部,一共23行,6


----hr用户----

1.  各个部门平均、最大、最小工资、人数,按照部门号升序排列。

2.   各个部门中工资大于5000的员工人数。

3.  各个部门平均工资和人数,按照部门名字升序排列。

4. 列出每个部门中有同样工资的员工的统计信息,列出他们的部门号,工资,人数。

5. 列出同部门中工资高于1000 的员工数量超过2 人的部门,显示部门名字、地区名称。

6. 哪些员工的工资,高于整个公司的平均工资,列出员工的名字和工资(降序)。

7. 哪些员工的工资,介于50号 和80号部门平均工资之间。 

8. 所在部门平均工资高于5000 的员工名字。

9. 列出各个部门中工资最高的员工的信息:名字、部门号、工资。

10.最高的部门平均工资是多少。 

 

--1. 各个部门平均、最大、最小工资、人数,按照部门号升序排列。

select department_id ,avg(salary),max(salary),min(salary),count(*) from employees group by department_id order

by department_id asc;


--2. 各个部门中工资大于5000的员工人数。

select department_id,count(*) from employees where salary>5000 group by department_id; 


--3. 各个部门平均工资和人数,按照部门名字升序排列。  

select d.department_name,avg(e.salary),count(*)  from employees e,departments d where e.department_id=d.department_id group by d.department_name order by d.department_name;

[置顶] Oracle SQL 经典查询练手第四篇_第4张图片

--4. 列出每个部门中有同样工资的员工的统计信息,列出他们的部门号,工资,人数。

select e1.department_id,e1.salary,count(*) from employees e1,employees e2 where

e1.department_id=e2.department_id and e1.salary=e2.salary and e1.employee_id<>e2.employee_id group by

e1.department_id,e1.salary;

(由于空间限制,此表的行和列都没有截取全部,一共23行,3列)

[置顶] Oracle SQL 经典查询练手第四篇_第5张图片

--5. 列出同部门中工资高于1000 的员工数量超过2 人的部门,显示部门名字、地区名称。

(子查询方式)

select * from (select d.department_name,l.city, count(*) cnumber from employees e,departments d ,locations l

where e.department_id=d.department_id and d.location_id=l.location_id and e.salary>100

group by d.department_name,l.city

) where cnumber>2;

(having关键字方式)

select d.department_name,l.city, count(*) from employees e,departments d ,locations l where

e.department_id=d.department_id and d.location_id=l.location_id and e.salary>100

group by d.department_name,l.city having count(*)>2;

[置顶] Oracle SQL 经典查询练手第四篇_第6张图片

--6. 哪些员工的工资,高于整个公司的平均工资,列出员工的名字和工资(降序)。

select e1.first_name||' '||last_name as name ,e1.salary from employees e1 where e1.salary>(select avg(salary) from

employees);

(由于空间限制,此表的行和列都没有截取全部,一共51行,2列)


--7. 哪些员工的工资,介于50号 和80号部门平均工资之间。 

select e1.first_name first_name,e1.last_name last_name,e1.salary from employees e1 where e1.salary between

(select avg(salary) from employees where department_id=50)  and (select avg(salary) from employees where

department_id=80);(由于空间限制,此表的行和列都没有截取全部,一共43行,3列)

[置顶] Oracle SQL 经典查询练手第四篇_第7张图片

--8. 所在部门平均工资高于5000 的员工名字。

select  e.first_name first_name,e.last_name last_name from employees e where department_id in(select

department_id from employees group by department_id having avg(salary)>5000);  (由于空间限制,此表的行和列

都没有截取全部,一共54行,2列)


--9. 列出各个部门中工资最高的员工的信息:名字、部门号、工资。

(子查询方式)

select e1.first_name first_name,e1.last_namelast_name,e1.department_id,e1.salary from employees e1 ,(select

max(salary) maxsalary,department_id from employees e group by department_id) e2 where e1.salary=e2.max

 salary and e1.department_id=e2.department_id;

(in关键字方式)

select e1.first_name first_name,e1.last_namelast_name,e1.department_id,e1.salary  from employees e1 where

(e1.department_id,salary)in (select department_id,max(salary) from employees e group by department_id);

[置顶] Oracle SQL 经典查询练手第四篇_第8张图片

--10. 最高的部门平均工资是多少。 

(子查询方式)

select e.sal from (select avg(salary) sal,department_id from employees group by  department_id order by sal desc)

e where rownum=1;

(聚合函数方式)

select max(e.sal) from (select avg(salary) sal from employees group by department_id) e;


作者水平有限,难免有错误之处,殷切希望广大读者批评指正。

转载请注明出处:http://blog.csdn.net/gcw1024

你可能感兴趣的:(java,oracle,sql,windows,经典)