码迷,mamicode.com
首页 > 数据库 > 详细

Oracle SQL 经典查询练手第三篇

时间:2016-03-30 13:21:10      阅读:1482      评论:0      收藏:0      [点我收藏+]

标签:

Oracle SQL 经典查询练手第三篇

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

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

表结构:

describe employees;

技术分享

describe departments;

技术分享

describe locations;

技术分享

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

技术分享

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

技术分享

select *from locations;

技术分享

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

----hr用户----

1.让SELECTTO_CHAR(SALARY,‘L99,999.99‘) FROM HR.EMPLOYEES WHERE  ROWNUM < 5 输出结果的货币单位是¥和$。

2.列出前五位每个员工的名字,工资、涨薪后的的工资(涨幅为8%),以“元”为单位进行四舍五入。

3.找出谁是最高领导,将名字按大写形式显示。

4. 找出First_Name 为David,Last_Name为Austin 的直接领导名字。

5. First_Name 为Alexander,Last_Name为Hunold领导谁。(谁向David 报告)。

6. 哪些员工的工资高于他直接上司的工资,列出员工的名字和工资,上司的名字和工资。

7. 哪些员工和Chen(LAST_NAME)同部门。

8. 哪些员工跟De Haan(LAST_NAME)做一样职位。

9. 哪些员工跟Hall(LAST_NAME)不在同一个部门。

10. 哪些员工跟William(FIRST_NAME)、Smith(LAST_NAME)做不一样的职位。

11. 显示有提成的员工的信息:名字、提成、所在部门名称、所在地区的名称。

12. 显示Executive部门有哪些职位。

13. 整个公司中,最高工资和最低工资相差多少。

14. 提成大于0 的人数。

15. 显示整个公司的最高工资、最低工资、工资总和、平均工资保留到整数位。

16. 整个公司有多少个领导。

17. 列出在同一部门入职日期晚但工资高于其他同事的员工:名字、工资、入职日期。

--1.让SELECTTO_CHAR(SALARY,‘L99,999.99‘) FROM HR.EMPLOYEES WHERE  ROWNUM < 5 输出结果的货币单位是¥和$。

SELECT TO_CHAR(SALARY,‘L99,999.99‘)FROM EMPLOYEES WHERE ROWNUM<5;

技术分享

SELECT TO_CHAR(SALARY,‘$99,999.99‘)FROM EMPLOYEES WHERE ROWNUM<5;

技术分享

-- 说明:对于‘$99,999.99‘格式符: 

--    L:表示强制显示当地货币符号 

--    $:表示显示美元符号 

--    9:表示一个数字 

--    0:表示强制0显示 

--    .:表示一个小数点 

--    ,:表示一个千位分隔符 

--2.列出前五位每个员工的名字,工资、涨薪后的的工资(涨幅为8%),以“元”为单位进行四舍五入。

(第一种)select first_name,salary,round(salary*1.08) sal from employees where rownum<6;

(第二种)select *from(select first_name,salary,round(salary*1.08) sal from employees order by salarydesc)whererownum<6;

技术分享

(说明:可能是由于Oracle版本的问题或者是我使用的工具的问题,我的解答可能和别的博客的解答不一样,读者们可以根据自己的实际情况选取,我选用的是第二种)

--3.找出谁是最高领导,将名字按大写形式显示。

select upper(first_name||‘ ‘||last_name)namefrom employees where manager_idis null;

技术分享

--4.找出First_Name 为David,Last_Name为Austin 的直接领导名字。

select first_name,last_name from employeeswhere employee_id=(select manager_id from employeeswhere first_name=‘David‘and last_name=‘Austin‘);

技术分享

--5.First_Name 为Alexander,Last_Name为Hunold领导谁。(谁向David 报告)。

select upper(first_name||‘ ‘||last_namename from employees where manager_idin(select employee_id from employeeswhere first_name=‘Alexander‘and last_name=‘Hunold‘);

技术分享

--6.哪些员工的工资高于他直接上司的工资,列出员工的名字和工资,上司的名字和工资。

select e1.first_name,e1.salary,e2.first_name,e2.salary from employees e1,employees e2 where e1.manager_id=e2.employee_id and e1.salary>e2.salary;

技术分享

--7.哪些员工和Chen(LAST_NAME)同部门。

select * from employeeswhere department_id=(select department_id from employeeswhere last_name=‘Chen‘);(由于空间限制,截图不完全,共6行,11列)

技术分享

--8.哪些员工跟De Haan(LAST_NAME)做一样职位。

select *from employeeswhere job_id=(select job_id from employeeswhere last_name=‘De Haan‘)and last_name<>‘DeHaan‘;(由于空间限制,截图不完全,共1行,11列)

技术分享

--9.哪些员工跟Hall(LAST_NAME)不在同一个部门。

select *from employeeswhere department_id<>(select department_id from employeeswhere last_name=‘Hall‘);(由于空间限制,截图不完全,共72行,11列)

 技术分享

--10.哪些员工跟William(FIRST_NAME)、Smith(LAST_NAME)做不一样的职位。

select *from employeeswhere job_id<>(select job_id from employeeswhere first_name=‘William‘ and last_name=‘Smith‘);(由于空间限制,截图不完全,共77行,11列)

技术分享

--11.显示有提成的员工的信息:名字、提成、所在部门名称、所在地区的名称。

select e.first_name,e.last_name,e.commission_pct,d.department_name,l.city from employees e,departments d,locations l where e.department_id=d.department_id and d.location_id=l.location_id

and e.commission_pct isnotnull;(由于空间限制,截图不完全,共34行,5列)

 技术分享

--12.显示Executive部门有哪些职位。

select job_id from employees e,departments d where e.department_id=d.department_id and d.department_name=‘Executive‘;

技术分享

--13.整个公司中,最高工资和最低工资相差多少。

select max(salary)-min(salaryfrom employees;

技术分享

--14.提成大于0 的人数。

select count(*)from employeeswhere commission_pct>0;

技术分享

--15.显示整个公司的最高工资、最低工资、工资总和、平均工资保留到整数位。

select max(nvl(salary,0))as highestsal,min(nvl(salary,0))as lowestsal,sum(nvl(salary,0))as sumsal,round(avg(nvl(salary,0)))as avgsal from employees;

技术分享

--16.整个公司有多少个领导。

select count(distinct(manager_id)) allLeaders from employees where manager_id isnotnull;

技术分享

--17.列出在同一部门入职日期晚但工资高于其他同事的员工:名字、工资、入职日期。

select distinct e1.first_name||‘ ‘||e1.last_name,e1.salary,e1.hire_date from employees e1,employees e2 where e1.department_id=e2.department_id and e1.hire_date> e2.hire_dateand e1.salary>e2.salary;( 由于空间限制,截图不完全,共65行,3列)

技术分享


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

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

Oracle SQL 经典查询练手第三篇

标签:

原文地址:http://blog.csdn.net/gcw1024/article/details/51012372

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!