&求部门平均薪水的等级
select deptno,avg_sal,grade from( select deptno,avg(sal) avg_sal from emp group by deptno)t join salgrade s on(t.avg_sal between s.losal and s.hisal);
&求部门中那些人薪水最高
select ename,sal from emp join( select max(sal) max_sal,deptno from emp group by deptno)t on( emp.sal=t.max_sal and emp.deptno=t.deptno);
&求部门平均薪水等级
select deptno,avg(grade) from( select deptno,ename,grade from emp e join salgrade s on( e.sal between s.losal and s.hisal)) t group by deptno;
&雇员中那些人是经理人
select empno,ename from emp where empno in( select distinct mgr from emp)
&不准用分组函数,求出薪水最高值(面试题)
select ename,sal from emp where sal not in( select distinct e.sal from emp e join emp e1 on( e.sal < e1.sal));
&求平均薪水最高的部门的部门编号
select deptno,avg_sal from( select avg(sal) avg_sal,deptno from emp group by deptno)where avg_sal=( select max(avg_sal) from( select avg(sal) avg_sal,deptno from emp group by deptno)) ;
2种写法:
select deptno,avg_sal from( select avg(sal) avg_sal,deptno from emp group by deptno)where avg_sal=( select max(avg(sal)) from emp group by deptno);
&求平均薪水最高的部门的部门名称
select dname from dept where deptno=( select deptno from( select avg(sal) avg_sal,deptno from emp group by deptno) where avg_sal=( select max(avg_sal) from ( select avg(sal) avg_sal,deptno from emp group by deptno)));
&求部门经理的等级最低的部门的部门名称
先求平均薪水:
select deptno, avg(sal) avg_sal from emp group by deptno;
再求平均薪水的等级:
select deptno,avg_sal,grade from( select deptno,avg(sal) avg_sal from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and s.hisal);
再求平均薪水的最低的等级是:
select min(grade) from( select deptno,avg_sal,grade from( select deptno,avg(sal) avg_sal from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and s.hisal));
最终:
select dname,t1.deptno,avg_sal,grade from( select deptno,avg_sal,grade from( select deptno,avg(sal) avg_sal from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and s.hisal))t1 join dept on(t1.deptno=dept.deptno)where t1.grade=( select min(grade) from ( select deptno,grade,avg_sal from( select deptno,avg(sal) avg_sal from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and s.hisal)));
里面有两段代码是完全重复的 哪怎么解决呢? 下面我们可以创建一个视图;
create view v$_dept_avg_sal_info as select deptno,grade,avg_sal from( select deptno,avg(sal) avg_sal from emp group by deptno) t join salgrade s on(t.avg_sal between s.losal and s.hisal) ;
修改之后:
select dname,t1.deptno,avg_sal,grade from v$_dept_avg_sal_info t1 join dept on(t1.deptno=dept.deptno) where t1.grade=( select min(grade) from v$_dept_avg_sal_info);
&求部门经经理人中平均薪水最低的部门名称
&求比普通员工的最高薪水还高的经理人名称
第一步:先求普通员工的最高薪水
select max(sal) from emp where empno not in( select distinct mgr from emp where mgr is not null);
结果:
select ename from emp where empno in( select distinct mgr from emp where mgr is not null) and sal>( select max(sal) from emp where empno not in( select distinct mgr from emp where mgr is not null));
&求薪水最高的前五名雇员
select ename,sal from ( select ename,sal from emp order by sal desc)where rownum<=5
&求薪水最高的第六列第十名雇员
&面试题:比较效率
select * from emp where deptno=10 and ename like '%A%'; select * from emp where ename like '%A%' and deptno=10;
相比之下第一条语句效率高些 因为先执行数字 如果deptno不等于10就不会在执行后面的了
相关推荐
通过对Oracle中多表连接技术的学习,我们可以更加灵活地处理复杂的查询需求。正确使用各种类型的连接,能够帮助我们高效地获取所需的数据,并且避免出现不必要的数据冗余。希望本文能够对大家在实际工作中运用Oracle...
Oracle 多表查询优化需要考虑多个方面,包括选择合适的表名顺序、使用 Cache Buffer、语句共享、优化查询路径、避免多表连接查询、优化数据统计、选择合适的索引、优化数据库结构、使用 Materialized View、优化...
Oracle数据库中的多表连接是数据库...通过这些练习,我们能够掌握Oracle中的多表连接、子查询、聚合函数如`COUNT()`和`AVG()`,以及时间比较和条件过滤等高级查询技术。这些技能对于理解和处理复杂数据库查询至关重要。
通过本节的学习,您将能够掌握如何利用Oracle数据库进行多表连接查询,以实现对三个或四个表的有效联合查询。 - **熟练掌握DELETE、UPDATE与INSERT的语法**:这些是数据库操作中的基础,也是最常用的操作之一。您将...
Oracle SQL 语句多表关联查询 Oracle SQL 语句多表关联查询是数据库管理系统中的一种常见查询方式,它可以从多个表中检索数据,满足业务需求。本文将详细介绍 Oracle SQL 语句多表关联查询的知识点,包括字符串和...
**联接查询(Join)**是指将两个或多个表的数据行按某种条件连接起来,形成一个新的结果集。在Oracle数据库中,联接查询可以分为以下几种类型: 1. **等值联接(Equijoin)** 2. **非等值联接(Non-Equijoin)** 3....
8. **多个连接条件**:当需要连接多个表时,可以使用`AND`操作符结合多个连接条件,确保正确地连接所有相关表。 9. **连接多个表**:连接n个表需要至少n-1个连接条件,例如连接三个表需要两个连接条件。这样可以...
如果查询涉及多个表,考虑使用连接操作符(JOIN)的优化,如选择合适的JOIN类型和使用外键约束。 工具在优化过程中也扮演着重要角色。例如,"源码"标签可能暗示了我们需要关注应用程序的代码层面。在SQL查询编写时...
在Oracle数据库中,表连接是查询多个表时非常重要的一个概念。通过不同的连接方式,可以实现数据的有效关联和检索。本文将对Oracle中的几种主要表连接方式进行详细介绍:内连接(Inner Join)、自然连接(Natural ...
Oracle表连接方式是指在数据库中连接多个表以获取所需数据的方法。根据不同的数据集和查询需求,Oracle提供了多种表连接方式,包括NESTED LOOP、HASH JOIN和SORT MERGE JOIN等。 NESTED LOOP NESTED LOOP是一种...
Oracle的外连接查询是数据库操作中的重要组成部分,它允许用户获取来自两个或更多表的数据,即使在某些情况下,这些表之间的连接条件不完全匹配。在理解外连接查询之前,我们首先要了解内连接,即最基础的相等连接。...
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
连接操作可以大大提高数据库查询的效率,特别是在需要访问多个表中的字段时。 连接的基本结构 连接的基本结构是一个 SELECT 语句,紧跟着 FROM 子句,FROM 子句中指定了要连接的表。连接条件使用 ON 子句指定,例如...
Oracle多表查询是数据库操作中常见且重要的技能,特别是在处理涉及多个数据源的复杂查询时。多表查询允许用户从两个或更多个表中合并数据,以获取更全面的信息。以下将详细介绍多表查询的基本概念、操作方法以及注意...
merge 操作就是将两边的行按照连接条件连起来,例如 t1.id=t2.id。这种方式将需要连接的两张表中的列都放到内存中,然后进行排序,而排序是一个消耗资源的操作,这样对于两张比较大的表,性能恐怕会比较差。所以, ...
在Oracle数据库中,为了获取来自多个表的数据,我们需要使用不同的连接方式来实现这一目的。本文将详细介绍三种主要的表连接方式:嵌套循环连接(Nested Loop Join,简称NL Join)、排序合并连接(Sort Merge Join,...
在Oracle数据库中,多表关联的UPDATE语句用于更新一个表中的数据,这些数据依赖于另一个或多个表的记录。这种操作在数据整合、错误修正或者数据同步时非常常见。以下我们将详细探讨如何使用不同方式执行多表关联的...