--查询工资最高的人的名字
select ename ,sal from emp where sal=(select max(sal) from emp );
--求出员工的工资在所有人的平均工资之上的人
select ename ,sal from emp where sal >(select avg(sal) from emp );
--求出每个部门中工资最高的那个人的名字
select ename,sal from emp join (select deptno,max(sal) max_sal from emp group by deptno) t on(emp.sal=t.max_sal and emp.deptno=t.deptno);
--求出每个部门的平均薪水
select deptno, avg(sal) from emp group by deptno;

--求出每个部门的平均薪水的等级是多少( 每个部门的平均薪水 ---的等级这个是求等级)
select deptno,grade from salgrade join (select deptno,avg(sal) avg_sal from emp group by deptno) t on t.avg_sal between losal and hisal;
--求部门平均的薪水等级(薪水等级的平均)
select avg(grade) from
(select deptno,grade from salgrade join (select deptno,avg(sal) avg_sal from emp group by deptno) t on t.avg_sal between losal and hisal);
--求雇员中哪些是经理人
select ename from emp where empno in (select mgr from emp);
--求雇员所对应的经理人
select e1.ename,e2.ename from emp e1 left join emp e2 on e1.mgr=e2.empno;

--查询平均薪水最高部门的部门编号
select deptno,avg_sal from
(select deptno,avg(sal) avg_sal from emp group by deptno)--当做一张表,否则没有表可以from
where avg_sal =
(select max(avg_sal)from (select deptno,avg(sal) 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)
where avg_sal =
(select max(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 on avg_sal between losal and hisal;

--查询平均薪水等级最低的部门的名称--利用视图可以简化程序代码
select dname from dept where deptno=
( select deptno from
((select deptno ,avg_sal, grade from (select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade on avg_sal between losal and hisal))
where grade=
(select min(grade) from
(select deptno ,avg_sal, grade from (select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade on avg_sal between losal and hisal)));

--利用视图简化代码
create view my_view as (select deptno ,avg_sal, grade from (select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade on avg_sal between losal and hisal);
--创建视图要用sys用户来给scott用户授权
用sys用户登录成功后,
grant create table,create view to scott;
授权成功后才可以利用scott普通用户创建视图;
--用视图来简化上面的代码
select dname from dept where deptno=
( select deptno from
(my_view )
where grade=
(select min(grade) from
my_view ));
--求比普通员工最高薪水还要高的经理人的名称
普通员工:即不在mgr这个里面的就是普通员工
经理人:在mgr这个里面的就是经理人
--普通员工的最高薪水
select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null);--对于有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 dname from dept d join (
select deptno,avg(sal) avg_sal from (select ename,sal,deptno from emp where empno in(select mgr from emp )) group by deptno ) s
on d.deptno =s.deptno
where avg_sal=
(select min(avg_sal) from (select deptno,avg(sal) avg_sal from (select ename,sal,deptno from emp where empno in(select mgr from emp )) group by deptno));

--求薪水最高的前5名的雇员
select ename,sal from (select ename,sal from emp order by sal desc) where rownum <=5;

mysql的分页是limit a,b oracle的分页比较特殊,没有limit只有rownum,这个是不显示的一个伪字段。这个字段只能使用小于或者小于等于,不能使用大于或者大于等于。
如果分页只能先查询出rownum这列 select rownum from emp,然后从这里面再rownum>或者<哪个数字。
select rownum ,ename from (select rownum no from emp) t where no>3 and no<10;

--求薪水最高的第6名到第10名的雇员
select ename,sal from (select ename,sal,rownum r from (select ename,sal from emp order by sal desc) ) where r>=6 and r<=10;

--求最后入职的5名员工(按照入职时间降序排列,取出前五个即可)

select ename,hiredate,rownum from(select ename,hiredate from emp order by hiredate desc ) where rownum<=5;

--比较效率
select * from emp where deptno=10 and ename like '%A%' --这个效率高些,跟java的短路与类似
select * from emp where ename like '%A% and deptno=10

oracle的sql语句训练的更多相关文章

  1. oracle常用SQL语句(汇总版)

    Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, ...

  2. oracle之sql语句优化

    oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...

  3. oracle中sql语句的优化

    oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info   (30000条数据)D ...

  4. oracle 常用sql语句

    oracle 常用sql语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom d ...

  5. Oracle中SQL语句分类

    Oracle中SQL语句分类如下:1.DML语句 insert/delete/update/select/merge/explan plan/lock table2.DDL语句 create/atlt ...

  6. Oracle和SQL语句的优化策略(基础篇)

    转载自: http://blog.csdn.net/houpengfei111/article/details/9245337 http://blog.csdn.net/uniqed/article/ ...

  7. Access、SQLServer、Oracle常见SQL语句应用区别

    Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...

  8. oracle的sql语句大小写

    我相信大家都知道,oracle数据库是区分大小写的,而且oracle的默认为大写的,也就是说你在sql脚本上面写的sql语句,oracle运行的时候,它会自动转化为大写的.注意一下,我这里举例子的计算 ...

  9. 查看oracle的sql语句历史记录和锁表的情况

    查看oracle的sql语句历史记录和锁表的情况 (2012-01-04 20:59:59) 转载▼ 标签: 杂谈 分类: database 查询sql的历史记录 select * from v$sq ...

随机推荐

  1. Java8新特性(一)——Lambda表达式与函数式接口

    一.Java8新特性概述 1.Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. 接口中的默认方法与静态方法 6. 新时间日期 API 7. 其他新特 ...

  2. 【转】mui 通过JSON动态的生成列表

    <script type="text/template" id="radio-tigan"> <%for(var i=0;i<recor ...

  3. 不同编译器下,定义一个地址按x字节对齐的数组

    以前一直用MDK,用__align(4)就可以定义一个首地址被4整除.地址按4字节对齐的数组,但今天用IAR发现这么写编译报错. 搜了一下才发现,原来不同的编译器,需要用不同的表达方式: #if de ...

  4. 管理员常用Windows PowerShell命令Top25

    即使Windows PowerShell已经由来已久,但很多管理员并不愿意主动熟悉PowerShell cmdlet命令行.随着微软扩展了PowerShell的功能,管理员应该对其功能及使用烂熟于心. ...

  5. 【MVC】 小问题

    [MVC] 小问题 1. url 传参中文乱码 : encodeURIComponent 转码 2. RedirectToAction 重定向 : ajax 调用无效, 直接 url 访问有效 3. ...

  6. SGU刷题之路,开始了

    0. 关于SGU的简介 SGU的网址是:acm.sgu.ru 向不了解的同学介绍一下SGU这个题库: 1. 题目难度很高,题目大多很经典. 2. 其数据范围很小,时间和空间要求也都很小,同时很精确.甚 ...

  7. jmeter3.2版本如何进行webservice接口功能测试

    jmeter3.2版本之后就没有SOAP/XML-RPC Request插件了,所以没办法直接进行webservice接口的测试. 原理上: Web service一般就是用SOAP协议通过HTTP来 ...

  8. url解读

    我刚刚学习的时候,我抓到包不知道哪个是协议.哪个是是服务器地址.哪个是端口号...不知道有没有老铁遇到跟我一样的. 接口:http://172.168.12.0:8888/old/login.do 解 ...

  9. hibernate和mybatis的之CRUD封装差别

    hibernate和mybatis的之CRUD封装差别 以下讲的是基于MVC三层架构. 由于设计架构的差别,hibernate在实际编程中可以把基础的CRUD封装,比如BaseDao类.其它类只要去继 ...

  10. Java开发JDBC连接数据库

    Java开发JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含6个步骤: JDBC五部曲1.加载驱动2.获得链接3.获取statement对象 4.执行SQL语句5.产生resultset对 ...