数据库小结

/*

1、基础查询操作案例解析

2、分页查询

分页查询就是一次查询部分指定范围的数据;

分页查询的实现方式:
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 数据库如何进行主键自增

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值