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) e 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_name) name 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(salary) from 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