`
sungang_1120
  • 浏览: 321664 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

oracle多表连接查询、条件查询

阅读更多

&求部门平均薪水的等级

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...

    ORACLE多表查询优化

    Oracle 多表查询优化需要考虑多个方面,包括选择合适的表名顺序、使用 Cache Buffer、语句共享、优化查询路径、避免多表连接查询、优化数据统计、选择合适的索引、优化数据库结构、使用 Materialized View、优化...

    Oracle多表连接练习

    Oracle数据库中的多表连接是数据库...通过这些练习,我们能够掌握Oracle中的多表连接、子查询、聚合函数如`COUNT()`和`AVG()`,以及时间比较和条件过滤等高级查询技术。这些技能对于理解和处理复杂数据库查询至关重要。

    ORACLE 多表查询与数据修改

    通过本节的学习,您将能够掌握如何利用Oracle数据库进行多表连接查询,以实现对三个或四个表的有效联合查询。 - **熟练掌握DELETE、UPDATE与INSERT的语法**:这些是数据库操作中的基础,也是最常用的操作之一。您将...

    Oracle sql语句多表关联查询

    Oracle SQL 语句多表关联查询 Oracle SQL 语句多表关联查询是数据库管理系统中的一种常见查询方式,它可以从多个表中检索数据,满足业务需求。本文将详细介绍 Oracle SQL 语句多表关联查询的知识点,包括字符串和...

    oracle 多表联接查询

    **联接查询(Join)**是指将两个或多个表的数据行按某种条件连接起来,形成一个新的结果集。在Oracle数据库中,联接查询可以分为以下几种类型: 1. **等值联接(Equijoin)** 2. **非等值联接(Non-Equijoin)** 3....

    oracle多表查询PPT课件.pptx

    8. **多个连接条件**:当需要连接多个表时,可以使用`AND`操作符结合多个连接条件,确保正确地连接所有相关表。 9. **连接多个表**:连接n个表需要至少n-1个连接条件,例如连接三个表需要两个连接条件。这样可以...

    Oracle数据库中大型表查询优化的研究

    如果查询涉及多个表,考虑使用连接操作符(JOIN)的优化,如选择合适的JOIN类型和使用外键约束。 工具在优化过程中也扮演着重要角色。例如,"源码"标签可能暗示了我们需要关注应用程序的代码层面。在SQL查询编写时...

    ORACLE表连接方式

    在Oracle数据库中,表连接是查询多个表时非常重要的一个概念。通过不同的连接方式,可以实现数据的有效关联和检索。本文将对Oracle中的几种主要表连接方式进行详细介绍:内连接(Inner Join)、自然连接(Natural ...

    Oracle表连接方式

    Oracle表连接方式是指在数据库中连接多个表以获取所需数据的方法。根据不同的数据集和查询需求,Oracle提供了多种表连接方式,包括NESTED LOOP、HASH JOIN和SORT MERGE JOIN等。 NESTED LOOP NESTED LOOP是一种...

    Oracle外连接查询

    Oracle的外连接查询是数据库操作中的重要组成部分,它允许用户获取来自两个或更多表的数据,即使在某些情况下,这些表之间的连接条件不完全匹配。在理解外连接查询之前,我们首先要了解内连接,即最基础的相等连接。...

    Oracle左连接返回多条记录中一条记录的查询语句

    Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录

    oracle数据库表左连接右连接全连接的认识

    连接操作可以大大提高数据库查询的效率,特别是在需要访问多个表中的字段时。 连接的基本结构 连接的基本结构是一个 SELECT 语句,紧跟着 FROM 子句,FROM 子句中指定了要连接的表。连接条件使用 ON 子句指定,例如...

    oracle多表查询

    Oracle多表查询是数据库操作中常见且重要的技能,特别是在处理涉及多个数据源的复杂查询时。多表查询允许用户从两个或更多个表中合并数据,以获取更全面的信息。以下将详细介绍多表查询的基本概念、操作方法以及注意...

    Oracle的三种表连接方式

    merge 操作就是将两边的行按照连接条件连起来,例如 t1.id=t2.id。这种方式将需要连接的两张表中的列都放到内存中,然后进行排序,而排序是一个消耗资源的操作,这样对于两张比较大的表,性能恐怕会比较差。所以, ...

    Oracle数据库3种主要表连接方式对比

    在Oracle数据库中,为了获取来自多个表的数据,我们需要使用不同的连接方式来实现这一目的。本文将详细介绍三种主要的表连接方式:嵌套循环连接(Nested Loop Join,简称NL Join)、排序合并连接(Sort Merge Join,...

    oracle-----oracle多表查询

    在Oracle数据库系统中,多表查询是日常数据处理的关键技能,尤其对于大型企业级应用来说,数据往往分散在多个关联的表中。本篇将深入探讨Oracle中的多表查询技术,包括基本概念、联接类型、子查询以及高级查询技巧。...

Global site tag (gtag.js) - Google Analytics