欢迎投稿

今日深度:

OracleSQL经典查询练手第三篇

OracleSQL经典查询练手第三篇


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列)

\

www.htsjk.Com true http://www.htsjk.com/oracle/24005.html NewsArticle OracleSQL经典查询练手第三篇 Oracle SQL 经典查询练手第三篇 本文分享的是Oracle SQL的经典查询第三篇,仅仅是作者自己的见解,如有问题,希望您给出建议或者方法。同时,欢迎广大读者...
评论暂时关闭