--把雇员按部门分组, 求最高薪水, 部门号, 过滤掉名字中第二个字母是'A'的, 要求分组后的平均薪水
>1500, 按照部门编号倒序排列
--求每个人的名字和他的经理人的名字,用外连接把KING也取出来
--哪些人的薪水在部门的平均薪水之上
--求部门中哪些人的薪水最高
--求部门平均薪水的等级
--求部门平均的薪水等级
--雇员中有哪些人是经理人
--不准用组函数,求薪水的最高值(面试题)
--求平均薪水最高的部门的部门编号
--求平均薪水最高的部门的部门名称
--求平均薪水的等级最低的部门的部门名称
--求部门经理人中平均薪水最低的部门名称 (思考题)
--求比普通员工的最高薪水还要高的经理人名称
--求薪水最高的前5名雇员
--求薪水最高的第6到第10名雇员(重点掌握)
--练习: 求最后入职的5名员工
--求每个部门中薪水最高的前两名雇员
--面试题: 比较效率
--求分段显示薪水的个数
如:
scale total
<800 0
800-1000 2
1001-2000 3
2001-5000 6
>5000 8
或者显示成为
800-1000 1001-2000 2000-5000
2 3 6
或者显示成为
DEPTNO 800-2000 2001-5000
------ ---------- ----------
30 5 1
20 2 3
10 1 2
--
========================第一份答案=======================
--把雇员按部门分组, 求最高薪水, 部门号, 过滤掉名字中第二个字母是'A'的,
要求分组后的平均薪水>1500, 按照部门编号倒序排列
- select e1.ename, e2.ename
- from emp e1 left join emp e2 on (e1.mgr = e2.empno)
--哪些人的薪水在部门的平均薪水之上
- select ename, sal
- from emp join
- (select deptno, max(sal) max_sal
- from emp
- group by deptno) t
- on (emp.deptno = t.deptno and emp.sal = t.max_sal)
--求部门平均薪水的等级
- select deptno, avg_sal, grade
- from salgrade s join
- (select deptno, avg(sal) avg_sal
- from emp
- group by deptno) t
- on (t.avg_sal between s.losal and s.hisal)
sql 代码
--求部门平均的薪水等级
- select ename from emp where empno in (select distinct mgr from emp)
--不准用组函数,求薪水的最高值(面试题)
sql 代码
- select ename from emp where empno not in
- (select distinct e1.empno from emp e1 join emp e2 on (e1.sal < e2.sal))
排序,取第一个
--求平均薪水最高的部门的部门编号
- select deptno from
- (select deptno, avg(sal) avg_sal from emp group by deptno) t
-
- where avg_sal =
-
- (select max(avg_sal) from
- (select deptno, avg(sal) avg_sal from emp group by deptno) t)
- select max(avg(sal)) from emp group by deptno --组函数嵌套
--求平均薪水最高的部门的部门名称
- select dname from dept where deptno =
- (select deptno from
- (select deptno, avg(sal) avg_sal from emp group by deptno) t
-
- where avg_sal =
-
- (select max(avg_sal) from
- (select deptno, avg(sal) avg_sal from emp group by deptno) t)
- )
--求平均薪水的等级最低的部门的部门名称
- select dept.deptno,dname from
- (
- select deptno, avg_sal, grade from salgrade s join
- (select deptno, avg(sal) avg_sal from emp group by deptno) t
- on (t.avg_sal between s.losal and s.hisal)
- ) t1 join dept on
- (t1.deptno = dept.deptno)
- where grade =
- (select min(grade) from
- (
- select deptno, avg_sal, grade from salgrade s join
- (select deptno, avg(sal) avg_sal from emp group by deptno) t
- on (t.avg_sal between s.losal and s.hisal)
- )
- )
-
- reate view v$_dept_info as
- select deptno, avg_sal, grade from salgrade s join
- (select deptno, avg(sal) avg_sal from emp group by deptno) t
- on (t.avg_sal between s.losal and s.hisal)
-
- elect deptno from v$_dept_info where grade = (select min(grade) from v$_dept_info);
--求部门经理人中平均薪水最低的部门名称 (思考题)
//....
--求比普通员工的最高薪水还要高的经理人名称
sql 代码
- select empno, ename, sal from emp where sal >
- (
- select max(sal) from
- (select empno,ename, sal
- from emp where empno not in (select distinct nvl(mgr, -1) from emp ))
- ) and empno in (select distinct mgr from emp)
-
- select distinct mgr from emp where mgr is not null
--求薪水最高的前5名雇员
--求薪水最高的第6到第10名雇员(重点掌握)
- select ename, sal from
- (
- select ename, sal, rownum r from
- (
- select ename, sal from emp order by sal desc
- )
- where rownum <=10
- )
- where r > 5 and r <= 10
--求每个部门中薪水最高的前两名雇员
- select deptno, ename, sal from emp order by deptno, sal desc
-
- select deptno, ename, sal , rownum r from
- (select deptno, ename, sal from emp order by deptno, sal desc);
-
- create view v as select deptno, ename, sal , rownum r from
- (select deptno, ename, sal from emp order by deptno, sal desc);
-
- select deptno, min(r) min_r from v group by deptno;
-
- select v.deptno, ename, sal , r from v join
- (
- select deptno, min(r) min_r from v group by deptno
- ) t
- on (v.deptno = t.deptno and v.r >= t.min_r and v.r <= t.min_r + 1)
- order by v.deptno, sal desc;
--练习: 求最后入职的5名员工
- select ename, hiredate from
- (
- select ename ,hiredate from emp order by hiredate desc
- )
- where rownum <= 5
--面试题: 比较效率
- select * from emp where deptno = 10 and ename like '%A%';
- select * from emp where ename like '%A%' and deptno = 10;
--求分段显示薪水的个数
如:
- scale total
- <800 0
- 801-1000 2
- 1001-2000 3
- 2001-5000 6
- >5000 8
-
- select '<800' as scale , count(*) as total from emp where sal < 800
- union
- select '800-1000' as scale , count(*) as total from emp where sal between 800 and 1000
- union
- select '2000-5000' as scale , count(*) as total from emp where sal between 2000 and 5000;
- ...
或者显示成为
800-1000 1001-2000 2000-5000
2 3 6
sql 代码
- select * from
- ( select count(*) as "800-1000" from emp where sal between 800 and 1000 )
- ,
- ( select count(*) as "1001-2000" from emp where sal between 1001 and 2000 );
- ...
或者显示成为
DEPTNO 800-2000 2001-5000
------ ---------- ----------
30 5 1
20 2 3
10 1 2
sql 代码
- select t1.deptno, "800-2000", "2001-5000" from
- (
- select deptno , count(*) as "800-2000" from emp where sal between 800 and 2000
- group by deptno
- ) t1
- join
- (
- select deptno , count(*) as "2001-5000" from emp where sal between 2001 and 5000
- group by deptno
- ) t2
- on
- t1.deptno = t2.deptno
- select ename, sal
- from
- (select ename, sal from emp order by sal desc)
- where rownum <=5;
sql 代码
- select deptno, avg(grade) from
- (select deptno, sal , grade
- from emp e join salgrade s on
- (e.sal between s.losal and s.hisal)
- ) t
- group by deptno
--雇员中有哪些人是经理人
sql 代码
- select ename, sal
- from emp join
- (select deptno, avg(sal) avg_sal
- from emp
- group by deptno) t
- on (emp.deptno = t.deptno and emp.sal > t.avg_sal)
--求部门中哪些人的薪水最高
sql 代码
- select max(sal), deptno from emp
- where ename not like '_A%'
- group by deptno
- having avg(sal) > 1500
- order by deptno desc;
--求每个人的名字和他的经理人的名字,用外连接把KING也取出来
sql 代码
分享到:
相关推荐
### Oracle中的子查询详解 #### 一、子查询概述与应用场景 子查询是SQL语言中一项非常重要的功能,它允许我们在一个查询语句中嵌入另一个查询语句,以此来解决复杂的查询问题。子查询可以极大地提高SQL语言的灵活...
### Oracle经典教程3——子查询和常用函数 #### 子查询概述 子查询是指在一个查询语句中嵌套另一个查询语句,内层查询的结果通常作为外层查询的一个条件或参数。子查询能够帮助我们更灵活地处理复杂的数据查询需求...
在学习Oracle子查询时,学员需要通过实践来熟悉不同场景下子查询的使用方法,掌握其返回的数据类型,以及如何在WHERE、HAVING、FROM子句中嵌入子查询,解决实际问题。同时,理解子查询返回空值对主查询的影响,以及...
6-11.sql和6-5.sql可能着重于某些特定主题,比如可能涉及的是高级查询技巧,如自连接、子查询嵌套或分组与排序。而0531.sql可能是某个特定日期(5月31日)的学习总结,包含了一些特别讨论的主题或者当天学习的重点。...
查询可以是简单的SELECT语句,也可以是复杂的联接、子查询等。 5. **处理查询结果**:发送SQL语句后,可以使用“接收数据行”命令获取查询结果集的一行数据,再通过“数据列数目”和“数据列值”等命令获取列信息和...
如果需要使用子查询,可以在`SELECT`, `FROM`或`WHERE`子句中嵌套查询。例如,找出某个表中不存在于另一个表的数据: ```sql SELECT column1 FROM table1 WHERE column1 NOT IN (SELECT column1 FROM table2); ``` ...
- 子查询的PPT文件"subquery.ppt"可能包含详细的讲解、示例和练习,建议仔细阅读并实践其中的示例。 通过深入学习和实践,你可以熟练掌握Oracle中的子查询,提高在数据库查询和管理中的效率。不断练习和理解这些...
下面将详细讲解Oracle子查询的使用及其在上述示例中的应用。 1. **子查询的类型:** - **单行子查询**:返回单行单列结果的子查询,通常用于比较或等值匹配。 - **多行子查询**:返回多行单列或多行多列结果的子...
在Oracle中,实现分页通常使用子查询结合`ROWNUM`伪列。 ##### 示例存储过程: ```sql CREATE OR REPLACE PROCEDURE PAGINATION_EXAMPLE( IN_START_ROW IN NUMBER, IN_PAGE_SIZE IN NUMBER, OUT_RESULT OUT SYS_...
在Oracle数据库中,连接操作是查询数据的核心部分,它允许我们合并来自多个表的数据。这里主要涉及三种类型的连接:左连接、右连接和自连接。理解这些连接方式对于有效地管理和查询数据库至关重要。 1. **左连接...
【基于成本的ORACLE子查询性能研究】 Oracle数据库在处理SQL查询时,特别是涉及子查询时,会基于一种称为“成本”的评估标准来选择最佳执行计划。本文将深入探讨Oracle中的几种子查询类型,以及如何优化子查询以...
8. **子查询**:在查询中嵌套查询,以根据其他查询的结果来获取数据。 9. **联接操作**:INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等,用于合并两个或更多表的数据。 10. **索引**:创建索引可以提高...
#### 九、单行子查询示例 例如,找出与员工ID为141相同职位并且工资高于员工ID为143的员工: ```sql SELECT last_name, job_id, salary FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE ...
"HR"示例方案是Oracle数据库中的一个标准样例,它包含了一系列与人力资源管理相关的表,如员工、部门、职位等。这个方案通常用于教学和演示目的,展示了Oracle数据库在处理企业级数据时的复杂性和灵活性。 `hr_main...
Oracle子查询是数据库查询语言SQL中的一个重要概念,它在数据处理和分析中起着至关重要的作用。子查询,也称为嵌套查询,是指在另一个查询内部的查询,它作为一个独立的查询被执行,并且其结果被主查询使用。下面...
根据提供的Oracle代码片段,我们可以总结出一系列与Oracle数据库操作相关的知识点。这些知识点涵盖了日期处理、时间转换、数据类型转换等方面的重要功能。下面是针对这些代码片段的详细解释: ### 1. 使用`LAST_DAY...
### Oracle子查询示例 #### 示例一:查找每个部门最低薪资的员工 ```sql SELECT ename, salary FROM emp_hiloo WHERE salary = (SELECT MIN(salary) FROM emp_hiloo); ``` 在这个例子中,外层查询选择了`ename`和...
本实例主要探讨了如何使用复杂的查询语句,包括子查询和外连接,来处理多表查询。 1. 子查询(Subquery) 子查询是嵌套在其他查询中的查询,可以在 `SELECT`、`FROM` 和 `WHERE` 子句中使用。相关子查询是指子查询...
例如,以下是一个简单的子查询示例: ```sql SELECT last_name FROM employees WHERE salary > (SELECT salary FROM employees WHERE employee_id = 149); ``` 在这个例子中,子查询(`SELECT salary FROM ...
Oracle支持复杂的SQL语法,如子查询、联接、视图等,这些都可以借助dbutils来执行。 4. **dbutils开发包及其源码**:开发者可以通过阅读源码来深入理解dbutils的工作原理,从而更好地利用其功能。源码提供了关于...