2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工



  1. ROWNUM的知识点

    A ROWNUM按照oracle的默认机制生成。

    B rownum只能使用<=
     <号,不能使用> 
    >=

  2. rownum的实现机制

    rownum表示,返回的结果集的行号(是一个属性,固化到一行之中,不会因为你排序,而发生变化)。没有第一行,就没有第二行;没有第二行就没有第三行。

  3. Oracle Top-N

select rownum,empno,ename,sal

from (select empno,ename,sal

from emp

order by sal desc)

where rownum <= 3;

4
求5=<x<=8之间的数据(分页)


select r,empno,ename,sal

from

(

select rownum r,empno,ename,sal

from (

select empno,ename,sal

from emp

order by sal desc

)

where rownum <=8

)

where r >= 5;

总结:内存排序,外层选

Oracle分页思想总结:

(内层排序,外层选,需要三层查询)

内:排序

中:使用rownum选择前n条;并给rownum指定一个别名,以供最外层过滤使用。

外:去掉前m条结果。

  1. 找到员工表中薪水大于本部门平均薪水的员工

    员工表  
    本部门平均薪水

    思路1:查员工的薪水  
    本部门平均薪水

    本部门关系

    要去本部门的薪水,需要求部门的薪水,要对部门分组è分组

思路2:查找员工表

部门薪水表 
=====》多表查询

思路3:等值连接条件

方法1:


select e.empno,e.ename,e.sal,d.avgsal

from emp e,

(select deptno,avg(sal) avgsal

from emp

group by deptno) d

where e.deptno=d.deptno and e.sal > d.avgsal;

方法2


相关子查询:主查询的参数,让子查询用,一般是通过别名技术。


一般子查询:子查询的结果,被主查询使用


select empno,ename,sal,(select avg(sal) from emp where deptno = e.deptno) avgsal

from emp e

where sal > (

select avg(sal)

from emp

where deptno = e.deptno

);

时间: 2024-10-26 14:38:28

2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工的相关文章

Oracle 取两个表中数据的交集并集差异集合

Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要求找出工资2500(不含2500)以上并且是男性(M)的员工编号,那么就要利用这两个表的关系做一个交集了 employee CODE NAME GENDER 001 Tom M 002 Jerry M 003 Ana F salary CODE SALARY 001 2800 002 2500 00

部门中薪资超过部门平均薪资的员工姓名及薪资

部门中薪资超过部门平均薪资的员工姓名及薪资 # 题表 # 建表 create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', #大部分是男的 age int(3) unsigned not null default 28, hire_date date not null, post varc

Oracle 函数 “判断数据表中不存在的数据,才允许通过”

1 create or replace function mca_detail_material_val(p_material_code VARCHAR2, --实参 2 p_material_name VARCHAR2, 3 p_mca_no VARCHAR2 4 ) 5 RETURN varchar2 AS 6 7 --物料编码/名称的验证,数据表(MATERIAL)中 不存在 该物料编码/名称,允许通过,填其他值都不允许通过 8 9 v_count1 NUMBER; -- 形参 10 v_

oracle如何向空表中添加一个类型为clob的非空列

一般的添加非空列的步骤是:先add可以为空的列,然后update该列为一个值(比如0),最后modify该列的类型 但是遇到类型为clob的就不行了.在modify这步时报错:ORA-22296:invalid ALTER TABLE option for conversion of Long datatype to LOB,于是去找了下22296错误的详细信息:(http://docs.oracle.com/cd/E11882_01/server.112/e17766/e19999.htm#O

oracle 如何随机取表中n条记录?

一.使用dbms_random.value进行排序 执行结果如下 第一次执行结果 第二次执行结果 第三次执行结果 经过三次试验,取到的数都是随机的 原文地址:http://blog.51cto.com/4923168/2090149

已知单链表的数据元素为整型数且递增有序,L为单链表的哨兵指针。编写算法将表中值大于X小于Y的所有结点的顺序逆置。(C语言)

对此题目的完整示例可直接运行代码如下: #include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; struct LNode *next; }LNode; LNode* creat(int n){ LNode *Link; LNode *p1,*p2; int data; Link=(LNode*)malloc(sizeof(LNode)); p2=Link; for(int i=0;i<n;+

[Oracle]关于Oracle分页写法的性能分析及ROWNUM说明

关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- 2121400 1.分页写法一 SELECT * FROM (SELECT ROWNUM RN, A.* FROM (SELECT * FROM BPM_PROCVAR ORDER BY VARID) A WHERE ROWNUM <= 40) B WHERE B.RN >= 21; 查询结果:

oracle分页查询 :rownum的使用

Oracle中,查询前N条记录,可以rownum select * from emp where rownum <= 10 不能对rownum用">" select * from emp where rownum > 5 rownum背后的查询机制: 1 Oracle executes your query. 2 Oracle fetches the first row and calls it row number 1. 3 Have we gotten past

选取不在另一张表中记录的方法及优化

假设我们想从A表中选择一些记录,记录中的部分字段的取值是B表所不存在的,这里定义A表为源表,B表为参照表.例如,常见的例子部门表(Department)作为源表,员工表(Employee)作为参照表,可以从部门表中列举出那些员工表中所不包含的部门id来,即找出那些没有员工的部门.    一般类来说,如果数据库支持集合操作符,就可以直接查询,如果没有,就使用子查询.(1)DB2 and PostgreSQL:select deptno from deptexceptselect deptno fr