`

Oracle表连接与子查询示例

阅读更多

--把雇员按部门分组, 求最高薪水, 部门号, 过滤掉名字中第二个字母是'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, 按照部门编号倒序排列

  1. select e1.ename, e2.ename   
  2. from emp e1 left join emp e2 on (e1.mgr = e2.empno)  


--哪些人的薪水在部门的平均薪水之上

  1. select ename, sal    
  2. from emp join    
  3.   (select deptno, max(sal) max_sal    
  4.    from emp    
  5.    group by deptno) t   
  6. on (emp.deptno = t.deptno and emp.sal = t.max_sal)  

 

--求部门平均薪水的等级

  1. select deptno, avg_sal, grade    
  2. from salgrade s join    
  3.   (select deptno, avg(sal) avg_sal    
  4.    from emp    
  5.    group by deptno) t   
  6. on (t.avg_sal between s.losal and s.hisal)   
sql 代码

 

--求部门平均的薪水等级

  1. select ename from emp where empno in (select distinct mgr from emp)  

 

--不准用组函数,求薪水的最高值(面试题)

sql 代码
  1. select ename from emp where empno not in    
  2. (select distinct e1.empno from emp e1 join emp e2 on (e1.sal < e2.sal))  


排序,取第一个


--求平均薪水最高的部门的部门编号

  1. select deptno from    
  2. (select deptno, avg(sal) avg_sal from emp group by deptno) t   
  3.   
  4. where avg_sal =    
  5.   
  6. (select max(avg_sal) from    
  7. (select deptno, avg(sal) avg_sal from emp group by deptno) t)   
  8. select max(avg(sal)) from emp group by deptno --组函数嵌套   


--求平均薪水最高的部门的部门名称

  1. select dname from dept where deptno =    
  2. (select deptno from    
  3.   (select deptno, avg(sal) avg_sal from emp group by deptno) t   
  4.   
  5.   where avg_sal =    
  6.   
  7.   (select max(avg_sal) from    
  8.     (select deptno, avg(sal) avg_sal from emp group by deptno) t)   
  9. )   

 

--求平均薪水的等级最低的部门的部门名称

  1. select dept.deptno,dname  from  
  2.    (   
  3.    select deptno, avg_sal, grade from salgrade s join  
  4.            (select deptno, avg(sal) avg_sal from emp group by deptno) t   
  5.    on (t.avg_sal between s.losal and s.hisal)   
  6.    ) t1 join dept on  
  7. (t1.deptno = dept.deptno)   
  8. where grade =   
  9. (select min(grade) from       
  10.    (   
  11.    select deptno, avg_sal, grade from salgrade s join  
  12.            (select deptno, avg(sal) avg_sal from emp group by deptno) t   
  13.    on (t.avg_sal between s.losal and s.hisal)   
  14.    )   
  15. )   
  16.   
  17. reate view v$_dept_info as    
  18. select deptno, avg_sal, grade from salgrade s join  
  19.            (select deptno, avg(sal) avg_sal from emp group by deptno) t   
  20.    on (t.avg_sal between s.losal and s.hisal)   
  21.   
  22. elect deptno from v$_dept_info where grade = (select min(grade) from v$_dept_info);   

 

--求部门经理人中平均薪水最低的部门名称 (思考题)
//....


--求比普通员工的最高薪水还要高的经理人名称

sql 代码
  1.  select empno, ename, sal from emp where sal >   
  2.  (   
  3.     select max(sal) from  
  4.             (select empno,ename, sal   
  5.                     from emp where empno not in (select distinct nvl(mgr, -1) from emp ))   
  6.  ) and empno in (select distinct mgr from emp)   
  7.   
  8. select distinct mgr from emp where mgr is not null  

 


--求薪水最高的前5名雇员

--求薪水最高的第6到第10名雇员(重点掌握)

  1. select ename, sal from  
  2. (   
  3.   select ename, sal, rownum r from  
  4.     (   
  5.       select ename, sal from emp order by sal desc  
  6.     )    
  7.   where rownum <=10   
  8. )    
  9. where r > 5 and r <= 10  

 

--求每个部门中薪水最高的前两名雇员 

  1. select deptno, ename, sal from emp order by deptno, sal desc  
  2.   
  3. select deptno, ename, sal , rownum r from  
  4. (select deptno, ename, sal from emp order by deptno, sal desc);   
  5.   
  6. create view v as select deptno, ename, sal , rownum r from  
  7. (select deptno, ename, sal from emp order by deptno, sal desc);   
  8.   
  9. select deptno, min(r) min_r from v group by deptno;   
  10.   
  11.  select v.deptno, ename, sal , r from v join  
  12.  (   
  13.  select deptno, min(r) min_r from v group by deptno   
  14.  ) t   
  15.  on (v.deptno = t.deptno and v.r >= t.min_r and v.r <= t.min_r + 1)   
  16.  order by v.deptno, sal desc;   


--练习: 求最后入职的5名员工

  1. select ename, hiredate from  
  2. (   
  3. select ename ,hiredate from emp order by hiredate desc  
  4. )   
  5. where rownum <= 5  

 

 

--面试题: 比较效率

  1. select * from emp where deptno = 10 and ename like '%A%';--这种是最高的   
  2. select * from emp where ename like '%A%' and deptno = 10;  

 


--求分段显示薪水的个数
如:

  1. scale      total   
  2. <800  0   
  3. 801-1000 2   
  4. 1001-2000 3   
  5. 2001-5000 6   
  6. >5000  8   
  7.   
  8. select '<800' as scale , count(*) as total from emp where sal < 800   
  9. union  
  10. select '800-1000' as scale , count(*) as total from emp where sal between 800 and 1000   
  11. union  
  12. select '2000-5000' as scale , count(*) as total from emp where sal between 2000 and 5000;   
  13. ...   

 

或者显示成为
800-1000 1001-2000 2000-5000
2  3  6

sql 代码
  1.  select * from  
  2.  ( select count(*) as "800-1000" from emp where sal between 800 and 1000 )   
  3.  ,   
  4.  ( select count(*) as "1001-2000" from emp where sal between 1001 and 2000 );   
  5. ...  

或者显示成为
DEPTNO   800-2000  2001-5000
------ ---------- ----------
    30          5          1
    20          2          3
    10          1          2

sql 代码
  1. select t1.deptno, "800-2000""2001-5000" from  
  2. (   
  3. select deptno , count(*) as "800-2000" from emp where sal between 800 and 2000   
  4. group by deptno   
  5. ) t1   
  6. join    
  7. (   
  8. select deptno , count(*) as "2001-5000" from emp where sal between 2001 and 5000   
  9. group by deptno   
  10. ) t2   
  11. on  
  12. t1.deptno = t2.deptno  

 

  1. select ename, sal    
  2. from    
  3.  (select ename, sal from emp order by sal desc)   
  4. where rownum <=5;  

 

sql 代码

  1. select deptno, avg(grade) from    
  2.   (select deptno, sal , grade   
  3.     from emp e join salgrade s on    
  4.     (e.sal between s.losal and s.hisal)   
  5.   ) t   
  6. group by deptno   

--雇员中有哪些人是经理人

sql 代码

  1. select ename, sal    
  2. from emp join    
  3.   (select deptno, avg(sal) avg_sal    
  4.    from emp    
  5.    group by deptno) t   
  6. on (emp.deptno = t.deptno and emp.sal > t.avg_sal)   

--求部门中哪些人的薪水最高

sql 代码

  1. select max(sal), deptno from emp   
  2. where ename not like '_A%'   
  3. group by deptno   
  4. having avg(sal) > 1500   
  5. order by deptno desc;  

--求每个人的名字和他的经理人的名字,用外连接把KING也取出来

sql 代码
分享到:
评论

相关推荐

    oracle中的子查询

    ### Oracle中的子查询详解 #### 一、子查询概述与应用场景 子查询是SQL语言中一项非常重要的功能,它允许我们在一个查询语句中嵌入另一个查询语句,以此来解决复杂的查询问题。子查询可以极大地提高SQL语言的灵活...

    Oracle经典教程3——子查询和常用函数

    ### Oracle经典教程3——子查询和常用函数 #### 子查询概述 子查询是指在一个查询语句中嵌套另一个查询语句,内层查询的结果通常作为外层查询的一个条件或参数。子查询能够帮助我们更灵活地处理复杂的数据查询需求...

    oracle讲义:子查询

    在学习Oracle子查询时,学员需要通过实践来熟悉不同场景下子查询的使用方法,掌握其返回的数据类型,以及如何在WHERE、HAVING、FROM子句中嵌入子查询,解决实际问题。同时,理解子查询返回空值对主查询的影响,以及...

    oracle sql 学习示例

    6-11.sql和6-5.sql可能着重于某些特定主题,比如可能涉及的是高级查询技巧,如自连接、子查询嵌套或分组与排序。而0531.sql可能是某个特定日期(5月31日)的学习总结,包含了一些特别讨论的主题或者当天学习的重点。...

    易语言连接ORACLE数据库查询报表

    查询可以是简单的SELECT语句,也可以是复杂的联接、子查询等。 5. **处理查询结果**:发送SQL语句后,可以使用“接收数据行”命令获取查询结果集的一行数据,再通过“数据列数目”和“数据列值”等命令获取列信息和...

    oracle常用查询语句示例

    如果需要使用子查询,可以在`SELECT`, `FROM`或`WHERE`子句中嵌套查询。例如,找出某个表中不存在于另一个表的数据: ```sql SELECT column1 FROM table1 WHERE column1 NOT IN (SELECT column1 FROM table2); ``` ...

    oracle子查询相关帮助

    - 子查询的PPT文件"subquery.ppt"可能包含详细的讲解、示例和练习,建议仔细阅读并实践其中的示例。 通过深入学习和实践,你可以熟练掌握Oracle中的子查询,提高在数据库查询和管理中的效率。不断练习和理解这些...

    25.Oracle子查询1

    下面将详细讲解Oracle子查询的使用及其在上述示例中的应用。 1. **子查询的类型:** - **单行子查询**:返回单行单列结果的子查询,通常用于比较或等值匹配。 - **多行子查询**:返回多行单列或多行多列结果的子...

    java调用oracle存储过程示例+分页示例

    在Oracle中,实现分页通常使用子查询结合`ROWNUM`伪列。 ##### 示例存储过程: ```sql CREATE OR REPLACE PROCEDURE PAGINATION_EXAMPLE( IN_START_ROW IN NUMBER, IN_PAGE_SIZE IN NUMBER, OUT_RESULT OUT SYS_...

    oracle数据库 左连接 右连接 自连接 。。

    在Oracle数据库中,连接操作是查询数据的核心部分,它允许我们合并来自多个表的数据。这里主要涉及三种类型的连接:左连接、右连接和自连接。理解这些连接方式对于有效地管理和查询数据库至关重要。 1. **左连接...

    基于成本的ORACLE子查询性能研究.pdf

    【基于成本的ORACLE子查询性能研究】 Oracle数据库在处理SQL查询时,特别是涉及子查询时,会基于一种称为“成本”的评估标准来选择最佳执行计划。本文将深入探讨Oracle中的几种子查询类型,以及如何优化子查询以...

    Oracle sql 源码 简单 全面 示例.rar

    8. **子查询**:在查询中嵌套查询,以根据其他查询的结果来获取数据。 9. **联接操作**:INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等,用于合并两个或更多表的数据。 10. **索引**:创建索引可以提高...

    oracle 子查询

    #### 九、单行子查询示例 例如,找出与员工ID为141相同职位并且工资高于员工ID为143的员工: ```sql SELECT last_name, job_id, salary FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE ...

    Oracle 示例方案 ----Mysql版数据脚本

    "HR"示例方案是Oracle数据库中的一个标准样例,它包含了一系列与人力资源管理相关的表,如员工、部门、职位等。这个方案通常用于教学和演示目的,展示了Oracle数据库在处理企业级数据时的复杂性和灵活性。 `hr_main...

    oracle子查询教程(ppt )

    Oracle子查询是数据库查询语言SQL中的一个重要概念,它在数据处理和分析中起着至关重要的作用。子查询,也称为嵌套查询,是指在另一个查询内部的查询,它作为一个独立的查询被执行,并且其结果被主查询使用。下面...

    oracle代码包括查询,子查询,,,

    根据提供的Oracle代码片段,我们可以总结出一系列与Oracle数据库操作相关的知识点。这些知识点涵盖了日期处理、时间转换、数据类型转换等方面的重要功能。下面是针对这些代码片段的详细解释: ### 1. 使用`LAST_DAY...

    Oracle子查询

    ### Oracle子查询示例 #### 示例一:查找每个部门最低薪资的员工 ```sql SELECT ename, salary FROM emp_hiloo WHERE salary = (SELECT MIN(salary) FROM emp_hiloo); ``` 在这个例子中,外层查询选择了`ename`和...

    OracleSQL实例-复杂查询语句的使用实例.pdf

    本实例主要探讨了如何使用复杂的查询语句,包括子查询和外连接,来处理多表查询。 1. 子查询(Subquery) 子查询是嵌套在其他查询中的查询,可以在 `SELECT`、`FROM` 和 `WHERE` 子句中使用。相关子查询是指子查询...

    dbutils + oracle 增删改查批量插入示例

    Oracle支持复杂的SQL语法,如子查询、联接、视图等,这些都可以借助dbutils来执行。 4. **dbutils开发包及其源码**:开发者可以通过阅读源码来深入理解dbutils的工作原理,从而更好地利用其功能。源码提供了关于...

    提高ORACLE数据库的查询统计速度

    - **减少子查询使用**:尽可能将多个子查询合并成一个复杂查询,或者改用其他更高效的方法实现相同功能。 ##### 4. 索引管理 - **建立合适类型的索引**:根据查询需求选择合适的索引类型(如B树索引、位图索引等)...

Global site tag (gtag.js) - Google Analytics