Oracle SQL 经典查询练手第三篇

Posted gcw1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle SQL 经典查询练手第三篇相关的知识,希望对你有一定的参考价值。

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 经典查询练手第三篇的主要内容,如果未能解决你的问题,请参考以下文章

oracle常用经典SQL查询

从基于 PL/SQL 函数体返回 SQL 查询的 Oracle APEX 5 经典报告下载到 Excel 选项,

好玩的ES--第三篇之过滤查询,整合SpringBoot

问题:oracle经典emp表,若要找出每种JOB中工资最高的员工的记录,该如何写查询SQL?

oracle 常用sql 经典sql函数使用 sql语法

Neo4j 第三篇:Cypher查询入门