【oracle知识点】锦集

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131040299
出自【进步*于辰的博客】

如果大家想要了解oracle使用细节和经验,请查阅博文【【oracle细节、经验】锦集】。

文章目录

  • 1、其他知识点链接
  • 2、关于`rownum`
    • 2.1 概述
    • 2.2 实用示例
  • 3、关于用户、对象权限、角色
    • 3.1 用户
    • 3.2 关于对象权限
    • 3.3 角色

1、其他知识点链接

  1. 索引;

2、关于rownum

参考笔记一,P18.3、P19.5。

2.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混乱(以目前我所知,仅有此原因)。

2.2 实用示例

数据表:emp(no, ..., sal)
需求:查询工资6 ~ 10名的员工的所有信息。
示例:

// 写法1
select e2.*
from (select e1.*, rownum rn
	  from (select * from emp order by sal desc) e1) e2
where rn between 6 and 10

// 写法2(优化)
select e2.*
from (select e1.*, rownum rn
	  from (select * from emp order by sal desc) e1
	  where rownum <= 10) e2
where rn > 5

因为order by会打乱rownum的顺序,故先执行order by,再进行rownum判断
2种写法都嵌套了3层 sql语句。
在写法1中,前2层仅对结果集进行1次排序,不做筛选,在第3层时,才进行筛选。rnrownum的别名,由于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,使用的是rnrn属于结果集,已固定。因此在筛选时,会遍历整个结果集(即根据工资降序排序后的所有员工信息);
而写法2,在第2层时,是通过rownum <= 10进行筛选,由于rownum生成机制(见上文),第2层仅遍历前10条记录,同时返回前10条记录(即工资最高的前10名员工)。因此,第3层仅遍历10条记录。

3、关于用户、对象权限、角色

3.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.2 关于对象权限

参考笔记一,P24.20、P25.23~25。

分类:
selectdeleteinsertupdatealter(修改)、references(外链)、index(索引)、execute(执行)。
命令:

// 授权
grant 权限[(字段)]|all privileges[(字段)]
on [schema.]Object
to 用户|public [with grant option]

// 回收权限
revoke 权限 on [schema.]Object from 用户;

说明:

  1. 权限即上述分类;all privileges指所有对象权限;schema是用户名;Object是对象,指数据表;public指所有用户;with grant option类似with admin option
  2. 关于public对象:既不是用户,也不是角色,为所有用户自动共有public拥有的所有权限,所有用户都会自动拥有,如:grant create user to public,表示所有用户都有权创建用户;
  3. 若用户有创建对象(如:数据表),则删除用户(drop user 用户)时需加上cascade,表示“先删除此用户旗下对象,再删除用户”;

3.3 角色

参考笔记一,P24.21。

create role 角色名;// 创建角色
grant 权限 to 角色;// 授权
grant 角色 to 用户;// 为用户分配角色
revoke 角色 from 用户;// 收回用户角色
revoke 权限 from 角色;// 收回权限
drop role 角色;// 删除角色

本文持续更新中。。。

你可能感兴趣的:(oracle知识点,oracle知识点)