Orcal数据库扩展

1、伪列

rowid属于表中的列,rowid 是一个用来唯一标记表中行的伪列,它是物理表中行数据的内部地址.(查询语句可以根据rowid到数据文件中唯一定位目标行)

 因此,根据rowid查询的效率是最高的,数据在入库落地时(即成功插入数据),Oracle数据库就给这条数据分配一个唯一的rowid

--根据rowid查询
select rowid,emp.* from emp;
select rowid,emp.* from emp where emp.rowid = 'AAAMgzAAEAAAAAgAAA';

2、行号

rownum是给结果集增加的一个序号,不属于任何的表,先有结果集,才能有rownum,始终

是从1开始编号(不能跨过1而存在)。

--rownum不属于任何的表
select rownum r,e.* from emp e
select e.*, e.rownum from emp e;

--始终是从1开始编号(不能跨过1而存在)
--查询emp表中前5行数据
select * from emp where rownum < 5;
select * from emp st where rownum between 1 and 5;

--查询5行后的数据(错误)
select * from emp st where rownum > 5;--查询无数据
查询2-5行的数据(错误)
select * from emp st where rownum between 2 and 5;--查询无数据

--那么如何去查询5-10行的数据呢?
--可以将行号作为from子查询作为新列,在去查询
--查找emp表的5-10行
select * from (select rownum rr,emp.* from emp) e where e.rr between 5 and 10


--相当于mysql中
select * from emp limit 4,5(从第五行开始取5行数)

3、分页查询

--分页查询,查询表中第2-5行的数据

--方法一:首先用子查询查出所有rownum形成一个临时表,然后在选择临时表的rownum列的2-5行数据

select *

from (select rownum rn, e.* from emp e) ee

where ee.rn between 2 and 5;

或者方法二:首先用子查询查出前5行数据形成临时表,然后在查rownum>2的数据

select *

from (select rownum rn,em.* from emp em where rownum <= 5) t

where t.rn >= 2;

总结分页查询2点: 1.对rownum取别名; 2.利用子查询。

4、视图

视图就是一条select语句,只在执行时候才有数据,不能往视图中插入、修改、删除数据,只能查询数据。(在查询时,视图返回的数据就是一张临时表)

--创建视图
create or replace view emp_vw as
select e.empno,e.ename from emp e;
--视图名等价于select语句
emp_vw=(select e.empno,e.ename from emp e);
--查询视图
select * from emp_vw;
select * from (select e.empno,e.ename from emp e);
--对视图重命名
rename emp_vw to vw_emp;
--删除视图
drop view vw_emp;

给scott用户授予创建视图的权限:(cmd命令行黑窗口登录,需要分号)

第一步sqlplus  /  as sysdba;

第二步grant create view to scott;

视图的作用:其他系统直接访问本系统的数据库时,有些基表比较隐私,这时可以针对这些基表

创建视图,只列出其他系统关心的列名,把视图供其他系统查询。

5、索引

索引相当于一本书的目录,能提升查询效率(因为数据量少),相当于表的一个附表(索引表)

create index i_student_name on t_student(name); -- 创建索引
create unique index i_student_id_name on t_student(id,name);
drop index i_student_name; -- 删除索引

唯一索引:不允许具有索引值相同的行,主键创建后一定包含一个唯一性索引。

PS:索引有两种:唯一索引,普通索引。一般情况下,表的索引是数据库自动创建的

(根据主键),查询时候,条件和索引列名有关,会自动使用索引表来查,

索引表通常含有一列(可能多列)。

6、orcal和mysql端口号

mysql的端口:3306

oracle的端口:1521

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值