【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131040299
出自【进步*于辰的博客】
如果大家想要了解oracle使用细节和经验,请查阅博文【oracle细节、经验锦集】。
文章目录
- 1、关于`rownum`
- 1.1 概述
- 1.2 实用示例
- 2、关于用户
- 3、关于对象权限
- 3.1 分类
- 3.2 命令
- 4、关于角色
1、关于rownum
参考笔记1,P18.3、P19.5。
1.1 概述
rownum
是虚拟字段,不真实存储,在返回结果集时生成,“宏观”作用类似序号。在每次查询时,从1
开始给结果集编号。常与<
、<=
连用。而与>
、>=
连用时,由于rownum
是在查询记录时逐个生成,并迭代。因此,若rownum
的判断在第1行记录时就不满足,则无法返回记录,即未迭代,rownum
始终为1
,最终结果集中无任何记录,与between...and...
连用时同理。
注意:
无论任何 sql语句,sql语句的执行顺序都是:from → where → group by → having → select → order by
。由于rownum
是伴随select
生成,故与order by
连用时,会导致rownum
混乱(以目前我所知,仅有此原因)。
1.2 实用示例
数据表:emp(no, ..., sal)
。
需求:查询工资6 ~ 10
名的员工的所有信息。
示例:
// 写法1
select e2.*
from (select e1.*, rownum rnfrom (select * from emp order by sal desc) e1) e2
where rn between 6 and 10// 写法2(优化)
select e2.*
from (select e1.*, rownum rnfrom (select * from emp order by sal desc) e1where rownum <= 10) e2
where rn > 5
因为order by
会打乱rownum
的顺序,故先执行order by
,再进行rownum判断
。
2种写法都嵌套了3层 sql语句。
在写法1中,前2层仅对结果集进行1次排序,不做筛选,在第3层时,才进行筛选。rn
是rownum
的别名,由于rn
属于第2层的结果集,非rownum
,故已固定,因此可以直接使用rn between 6 and 10
筛选出第6 ~ 10
名。
而在写法2中,在第2层时就进行结果集筛选,rownum
初始为1
,满足rownum <= 10
,则返回记录,同时rownum
迭代,如此反复直到条件不满足,这样就查询出前10条记录(即工资最高的前10名员工),此时rownum
固定,定义别名rn
。然后,第3层可以直接使用rn
筛选出第6 ~ 10
名。
补充说明:
写法2较写法1,效率高很多。
2种写法在第1层时,都返回根据工资降序排序后的所有员工信息。
因为写法1是在第3层才进行结果集筛选,由于条件是rn between 6 and 10
,使用的是rn
,rn
属于结果集,已固定。因此在筛选时,会遍历整个结果集(即根据工资降序排序后的所有员工信息);
而写法2,在第2层时,是通过rownum <= 10
进行筛选,由于rownum
的生成机制(见上文),第2层仅遍历前10条记录,同时返回前10条记录(即工资最高的前10名员工)。因此,第3层仅遍历10条记录。
2、关于用户
参考笔记1,P24.19。
创建用户:
create user 用户名 identified by 密码;
修改用户配额:
alter user 用户名 quota 空间大小 on 表空间名
或:
grant unlimited tablespace to 用户名;// 无限表空间
授权:
grant 权限 to 用户 [with admin option];// []内语句的作用是:允许此用户将此权限授予其他用户
回收权限:
revoke 权限 from 用户;// 若此用户已将此权限授予其他用户,则回收权限时不会连带回收
其他命令:
alter user 用户 identified by 密码;// 修改密码
3、关于对象权限
参考笔记1,P24.20。
3.1 分类
select
、delete
、insert
、update
、alter
(修改)、references
(外链)、index
(索引)、execute
(执行)。
3.2 命令
授权:
grant 权限[(字段)]|all privileges[(字段)]
on [schema.]Object
to 用户|public [with grant option]
权限即上述分类;all privileges
指所有对象权限;schema
是用户名;Object
是对象,指数据表;public
指所有用户;with grant option
类似with admin option
。
回收权限:
revoke 权限 on [schema.]Object from 用户;
4、关于角色
参考笔记1,P24.21。
create role 角色名;// 创建角色
grant 权限 to 角色;// 授权
grant 角色 to 用户;// 为用户分配角色
revoke 角色 from 用户;// 收回用户角色
revoke 权限 from 角色;// 收回权限
drop role 角色;// 删除角色
本文持续更新中。。。