黑马程序员c语言教程:Oracle指令(6)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“黑马程序员c语言教程”。
--------------------------------为什么in的后面不能order by ?
---求部门经理人中平均薪水最低的部门名称(思考题)第一步,求部门经理的雇员编号
select distinct mgr from emp where mgr is not null 第二步,按部门统计,求部门经理的平均薪水
select deptno,avg(sal)avg_sal from emp where empno in(select distinct mgr from emp where mgr is not null)group by deptno 第三步,求最低值
select min(avg(sal))from emp where empno in(select distinct mgr from emp where mgr is not null)group by deptno 第四步,求部门经理人中平均薪水最低的部门名称
select deptno from(2222222222222)where avg_sal =(***333333333)
select dname from dept where deptno in(select deptno from(select deptno,avg(sal)avg_sal from emp where empno in(select distinct mgr from emp where mgr is not null)group by deptno)where avg_sal =(select min(avg(sal))from emp where empno in(select distinct mgr from emp where mgr is not null)group by deptno))----------------求比普通员工的最高薪水还要高的经理人名称--1,求所有经理的编号
create or replace view v1 as select distinct mgr from emp where mgr is not null select * from v1--2,普通员工的最高薪水
select max(sal)from emp where empno not in(select distinct mgr from emp where mgr is not null)--3,select ename from emp where empno in(select * from v1)and sal >(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))
------------------求薪水最高的前5名雇员--1,先观察一下
--2,看看rownum的作用
--3,不是我们想要的结果
select ename,sal from emp where rownum
--------------------求薪水最高的第6到第10名雇员(重点掌握)--这种没法实现,oracle下rownum只能使用 >= 等比较操作符--注意里面的rownum和外面的rownum的区别,外面要想访问里面的rownum,必须取得一个别名。
select * from(select ename,sal from emp order by sal desc)t where rownum>=5 and rownum
--所以再套一层select select * from(select t.*,rownum r from(select ename,sal from emp order by sal desc)t)where r>=5 and r
--还有一种排序方式 select * from(select * from emp order by sal desc)where rownum
--2,取前5行
-----求每个部门中薪水最高的前两名雇员
--1,每个员工的姓名,部门,工资,按部门和工资(倒序)排列
select ename,deptno,sal from emp order by deptno,sal desc--2,套一层,加上个r select ename,deptno,sal,rownum r from(select ename,deptno,sal from emp order by deptno,sal desc)t--3,创建试图
create or replace view v1 as select ename,deptno,sal,rownum r from(select ename,deptno,sal from emp order by deptno,sal desc)t--观察一下
select * from v1
--每个部门中,薪水最高的第一行,并创建试图 create or replace view v2 as select deptno,min(r)min_r from v1 group by deptno
--两个view跨表连接,大于薪水最高的行数,小于最高的行数+1,并且部门编号要匹配 select ename from v1 join v2 on(v1.deptno = v2.deptno and v1.r >=v2.min_r and v1.r
-------------------面试题: 比较效率
select * from emp where deptno = 10 and ename like '%A%';select * from emp where ename like '%A%' and deptno = 10;
----------------------------使用union、minus
--使用union、minus可以用来实现结果集的合并和去除(可以理解为加和减),例如: select * from emp where deptno=10 union select * from emp where deptno=20;
--相当于
select * from emp where deptno=10 or deptno=20
--而下面的语句
select * from emp where deptno in(10,20)minus select * from emp where sal
select * from emp where deptno in(10,20)and sal>=1500
--求分段显示薪水的个数
如:
scale total 5000 8
select '
union select '=801
--或者显示成为
--注意:使用between..and..的时候,包含了最大和最小值。800-1000 1001-2000 2001-5000 2 3 6 select * from(select count(*)as “800-1000” from emp where sal >=800 and sal =1001 and sal =2001 and sal
--或显示成为
DEPTNO 800-2000 2001-5000--------------------------30 5 1 20 2 3 10 1 2 select t.deptno,“800-2000”,“2001-5000” from(select deptno,count(*)as “800-2000” from emp where sal between 800 and 2000 group by deptno)t join(select deptno,count(*)as “2001-5000” from emp where sal between 2001 and 5000 group by deptno)t1 on t.deptno = t1.deptno
--sql structured query language --DML--Data Manipulation Language--数据操作语言 query information (SELECT), add new rows (INSERT), modify existing rows (UPDATE)......
------------------------- --order by的用法--员工信息按照姓名正序排列select * from emp order by ename asc; --员工信息按照倒叙排列select * from emp order by ename......
------------------------- --不准用组函数(即MAX()),求薪水的最高值(面试题) --第一种解决办法: --1,先把所有薪水按照倒序排列 --2,再取第一行 select * from (select sal......
--总结一下select语法 select from where group by having order by ------------------------- -- 执行顺序very important! -- 首先执行where语句将原有记录过滤; -- 第二......
--什么时候用外连接呢?比如领导向你要所有学生的列表,顺便把所属的班级也列出来,就需要外连接 --在Where语句中使用子查询--- --雇员中最高薪水的人员名称 --1,先求出最高薪......