一.角色和权限
(1)A用户访问B用户下的表,但是没有dba权限
方案一直接授权法:用B用户登录,执行 (grant select on B用户.表名 to A用户)
然后用A用户登,执行(select * from B用户.表名)即可查询B用户下的表
方案二授予角色法:用system登录,自定义一个角色,(grant role 角色名)
将访问B用户表的权限赋予这个角色(grant select on B用户.表名 to 角色名)
将这个角色再赋予A用户(grant 角色名 to scott)
收回B用户赋予A用户的权限:(revoke select on B用户.表名 from A用户)
(2)角色和权限的关系
一个角色可以囊括多个权限,多个权限可以隶属于一个角色
二.常用数据类型
三. sql简介
解锁用户
alter user 用户名 account unlock
四.sql查询
1.查询emp表自然排序下的第三条记录
SELECT * FROM
(
SELECT ename,ROWNUM run FROM emp WHERE ROWNUM<=3
)temp
WHERE TEMP.run=3
ROWNUM 查询返回的是结果集中行的序号,可以使用它来限制查询返回的行数
通过测试可知,Rownum只能对=1和<N进行筛选,如果>M不能筛选,如何规避。
通过子查询构建临时表,让伪列Rownun成为临时表中的列,然后限定条件使用伪列的
别名。
2.查询员工表中薪资排名第五的员工SELECT * FROM
(
SELECT ename,ROWNUM rn FROM (SELECT * FROM EMP ORDER BY SAL DESC) temps
)temp
WHERE rn=5
3.oracle sql分页实现
SELECT * FROM
(
SELECT ename,ROWNUM rn FROM (SELECT * FROM EMP ORDER BY SAL DESC) temps
where ROWNUM <=10
)temp
WHERE rn>=6
4.查询表中无重复记录的学生的年龄
SELECT DISTINCT STUAGE FROM STUDENT
5.利用现有表创建新表
(1)选择所有数据
CREATE TABLE STUDENT1
AS
SELECT * FROM STUDENT
(2)选择指定的列
CREATE TABLE STUDENT2
AS
SELECT stuname,stuage FROM STUDENT
(3)只保留表结构,不保留数据
CREATE TABLE STUDENT1
AS
SELECT * FROM STUDENT
where 1=2
6.查询表中有多少条记录
select count(*) from student //执行效率低
select count(1) from student //执行效率高
7.删除有重复数据的记录并保留年龄最大值的一列
Delete from student where ROWID not in
(
select max(ROWID) from student
group by stuname,stuage
HAVING(count(*)=1)
union
select max(ROWID) from student
group by stuname,stuage
HAVING(count(*)>1)
)
8.sql操作符
(1)算数操作符 + - * /
(2)比较操作符 > <
(3) 逻辑操作符 and or
(4)集合操作符
UNION(联合) 可以去重
UNION ALL(联合所有) 不可以去重
INTERSECT(交集) 查询共有的内容
MINUS(减集) 返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录
(5)连接操作符 ||