/*
分页查询就是一次查询部分指定范围的数据;
分页查询的实现方式:
2.1 使用rownum伪列进行分页查询
rownum伪列是一个Oracle数据提供的虚拟列值,用于标识查询结果集中的每条记录的序号;
rownum伪列只能从1开始,不能从其他值开始;
2.2 使用集合操作(减集操作)
2.3 mysql使用limit关键字进行分页操作,但是Oracle数据不支持limit关键字;
– 分页:查询1-10条记录
select * from core_user where 1=1 limit 0,10;(后面这个10代表的容量,从1开始查10个)
– 分页:查询11-20条记录
select * from core_user where 1=1 limit 10,10;(后面这个10代表的容量,从11开始查10个)
–上面代码需要在mysql下执行。
3.1 Oracle数据库使用sequence+trigger实现;
3.2 Mysql数据库使用autoincrement属性;
*/
select * from employees;
select e.*,d.department_name from employees e,departments d
where e.department_id = d.department_id order by e.employee_id;
---- 查询一下部门60中的比员工编号为200的员工的工资高的员工信息
– 查询员工编号为200的员工的工资
select salary from employees where employee_id = 200;
– 部门60中的员工信息
select * from employees where department_id = 60;
— 综合查询
select * from employees where department_id = 60 and salary > (
select nvl(salary,0) from employees where employee_id = 200
);
—显示部门编号大于60的各个部门的最高工资、最低工资、平均工资及部门名,且要求平均工资不能低于5000;
select * from employees;
select * from departments;
— 各个部门的最高工资、最低工资、平均工资查询那结果中显示部门名(需要部门表和员工表进行等值连接)
select d.department_name,min(nvl(e.salary,0)) minSalary,max(nvl(e.salary,0)) as maxSalary,avg(nvl(e.salary,0)) avgSalary
from departments d,employees e where d.department_id=e.department_id group by d.department_name
—显示部门编号大于60的各个部门的最高工资、最低工资、平均工资及部门名
select d.department_name,min(nvl(e.salary,0)) minSalary,max(nvl(e.salary,0)) as maxSalary,avg(nvl(e.salary,0)) avgSalary
from departments d,employees e where d.department_id=e.department_id and e.department_id>60 group by d.department_name
—综合查询
select d.department_name,min(nvl(e.salary,0)) minSalary,max(nvl(e.salary,0)) as maxSalary,avg(nvl(e.salary,0)) avgSalary
from departments d,employees e where d.department_id=e.department_id and e.department_id>60 group by d.department_name
having avg(nvl(e.salary,0)) >=5000;
-------------------------分页查询-----------------------------------------------------
select rownum,e.* from employees e;
— 使用rownum进行分页查询第一页(1-10条记录)
select rownum rr,e.* from employees e where rownum <11;
— 使用rownum进行分页查询第二页(11-20条记录)
select rownum rr,e.* from employees e where rownum <20 and rownum >10;
— 使用子查询固化rownum伪列,然后在进行查询
select * from (
select rownum rr,e.* from employees e where rownum <=20) tt
where tt.rr > 10;
— 使用集合操作(减集)进行分页操作
select rownum rr,e.* from employees e where rownum <=20
minus
select rownum rr,e.* from employees e where rownum <=10
-------------------------------Oracle数据实现主键自增-----------------------------------------
— 使用select语句新建一张表
create table emps1 as select employee_id,first_name employee_name,salary from employees where 1=2;
— 查看新建表
select * from emps1;
– 1为自增主键字段新建一个序列对象
create sequence emps1_employee_id_sequ
–start with 1 — 起始值 默认为 1
–increment by 1 — 自增步长 默认步长为1
–nomaxvalue — 没有最大值 默认为nomaxvalue
–nocycle — 不循环 默认为 nocycle
–nocache — 不使用缓存 默认为 nocache
— 补充:如何获取序列对象的值呢?使用序列的两个伪属性:nextval(下一个值) currval(当前的值)
– select emps1_employee_id_sequ.nextval,emps1_employee_id_sequ.currval from dual;
– 2 为自增主键字段所在的表新建一个触发器,在进行新增操作时,就自动为主键字段填充序列的下一个值
create or replace trigger emps1_employee_id_trigger
– before 表示触发的时机 on 表示触发器所依赖的表对象
before insert on emps1
for each row
begin
– 触发器触发之后执行的业务逻辑处理,此处为主键字段填充序列的值
select emps1_employee_id_sequ.nextval into :new.employee_id from dual;
end;
— 验证新增操作是不是主键自增
insert into emps1(employee_name,salary) values(‘张三2’,4500);
– 查看新增表结果
select * from emps1;