对sql语言的以下知识点回顾:
1.视图(View)
2.序列(Sequence)
3.索引(Index)
4.同义词(Synonym)
5.创建用户(User)
1.视图(View)
1.1什么是视图
视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。
作用:可以通过创建表的视图来表现数据的逻辑子集或数据的组合。
1.2视图的优越性
a. 视图限制数据的访问,因为视图能够选择性的显示表中的列。
b. 视图可以用来构成简单的查询以取回复杂查询的结果。例如,视图能用于从多表中查
信息,而用户不必知道怎样写连接语句。
c. 视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。
1.3视图类型
a.简单视图 b.复杂视图
1.4简单视图和复杂视图的区别:
简单视图:
(1)数据仅来自一个表
(2)不包含函数或数据分组
(3) 能通过视图执行 DML 操作
复杂视图:
(1)数据来自多个表
(2)包含函数或数据分组
(3) 不允许通过视图进行 DML 操作
1.5 创建简单视图
create view emp80(视图名) as select employee_id,last_name,salary(列名) from employees(基表) wheredepartment_id=80(基表查询条件);
1.6用子查询中的列别名创建视图
create view emp50 as select employee_id id_number(列别名) ,last_name name(列别名),salaryann_salary(列别名) from employees where department_id=50;
1.7从视图中取回数据
select id_number,ann_salary (列名。。)from emp50(视图名);
1.8创建复杂视图
※必须使用列别名命名此表达式
create view emp40(视图名) as select department_name, avg(e.salary) avg,min(e.salary) min ,max(e.salary) max(函数) from employeese,departments d where e.department_id=d.department_id group by d.department_name(对列分组);
1.9在定义视图时指定列名
a.在列的后面其别名
create view emp40(视图名)as select department_name(别名), avg(e.salary) avg(别名),min(e.salary) min(别名) ,max(e.salary) max(函数) from employeese,departments d where e.department_id=d.department_id group by d.department_name(对列分组);
b类:通过在试图名后给列其别名
create view emp30(name,avg,min,max) as select department_name,
avg(e.salary),min(e.salary),max(e.salary) from employees
e,departments d where e.department_id=d.department_id group by d.department_name;
1.10视图中 DML 操作的执行规则
如果视图中包含下面的部分就不能修改数据:
a.组函数
b.GROUP BY 子句
c. DISTINCT 关键字
d.用表达式定义的列
1.11拒绝 DML 操作
create view emp60 as select * from employees
with read only
1.12通过工具创建视图
1.13删除视图
drop view emp30;
1.14内建视图
1.14.1什么是内建视图
• 内建视图是一个带有别名 (或相关名) 的可以在 SQL 语句中使用的子查询。
• 一个主查询的在 FROM 子句中指定的子查询就是一个内建视图。
内建视图:内建视图由位于 FROM 子句中命名了别名的子查询创建。该子查询定义一
个可以在主查询中引用数据源。
1.15Top-N 分析
1.15.1 什么是“Top-N”分析
Top-N 查询在需要基于一个条件,从表中显示最前面的 n 条记录或最后面的 n 条记
录时是有用的。
1.15.2 执行“Top-N”分析
Top-N 查询使用一个带有下面描述的元素的一致的嵌套查询结构:
•子查询或者内建视图产生数据的排序列表, 该子查询或者内建视图包含 ORDER BY 子
句来确保排序以想要的顺序排列。为了取回最大值,需要用 DESC 参数。
• 在最后的结果集中用外查询限制行数。外查询包括下面的组成部分:
− ROWNUM 伪列,它为从子查询返回的每一行指定一个从 1 开始的连续的值
− 一个 WHERE 子句,它指定被返回的 n 行,外 WHERE 子句必须用一个<或
者<=操作。
1.16Oracle的分页查询
1.16.1 什么是分页查询
当查询的结果集数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被
耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成。解决这个问题
的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一部分数
据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
分页查询原则:
在内建视图中通过 rownum伪劣值的判断来指定获取数据的数量。
分页单位:每页展示多少条数据
起始位置:(页数-1)*10
末尾位置;页数*10;
select e2.rn,e2.* from (select rownum rn,e.* from employees e)e2 where
e2.rn>0 and e2.rn<=10;
Top_n与分页查询的区别:
Top_n中rownum在主查询中,分页查询rownum在子查询中。Top_n只能从1开始。不能直接跳过1来选择
2.序列(Sequence)
2.1什么是序列
序列是用户创建的数据库对象,序列会产生唯一的整数。序列的一个典型的用途是创建
一个主键的值,它对于每一行必须是唯一的。序列由一个 Oracle 内部程序产生并增加或减
少。序列是一个节省时间的对象,因为它可以减少应用程序中产生序列程序的代码量。序列
号独立于表被存储和产生,因此,相同的序列可以被多个表使用。
2.2创建序列
2.2.1通过DDL 语句创建序列
create sequence dept_seq3(序列名) increment by(序列间隔) 5 start with(开始值) 5 maxvalue (最大值)500 nocache(是否缓冲) nocycle(是否循环);
2.2.2通过工具创建序列
2.3操作序列
2.3.1查询序列
select sequence_name,min_value,max_value,increment_by,cycle_flag,cache_size,last_numberfrom
user_sequences(系统数字字典表);
※查询最大值,最小值,间隔值,cycle,cache只能从数字字典中查
NEXTVAL 和 CURRVAL 伪列
select dept_seq7.currval fromdual
select dept_seq7.nextval fromdual 先于currval使用
• NEXTVAL 返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于
不同的用户也是如此
• CURRVAL 获得当前的序列值
• 在 CURRVAL 获得一个值以前,NEXTVAL 对该序列必须发布
2.4修改与删除序列
2.4.1修改序列
insert into departments (列名1,列名2,列名3,列名4)values(dept_seq5.nextval,'Support',150,2500);
alter sequence dept_seq(序列名) increment by 20 maxvalue 999999 nocyclenocache;
2.4.2修改序列的原则
必须是被修改序列的所有者,或者有 ALTER 权限。
用 ALTER SEQUENCE 语句,只有以后的序列数会受影响。
用 ALTER SEQUENCE 语句,STARTWITH 选项不能被改变。为了以不同的数重新开
始一个序列,该序列必须被删除和重新创建。
2.4.3删除序列
Drop sequence 序列名;
3.索引(Index)
3.1什么是索引
在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序
的一种存储结构, 它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的
数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所
需的内容。
索引提供对表中行的直接和快速访问, 它的目的是用已索引的路径快速定位数据以减少
磁盘 I/O。索引由 Oracle 服务器自动使用和维护,索引逻辑地和物理地独立于他们索引的
表,这意味者索引可以在任何时候被创建或删除,并且不影响基表或其它的索引。当删除表
时,相应的索引也被删除。
3.2索引的类型
唯一性索引:当你在一个表中定义一个列为主键,或者定义一个唯一键约束时 Oracle
服务器自动创建该索引,索引的名字习惯上是约束的名字。
非唯一索引:由用户创建,例如,可以创建一个 FOREIGN KEY 列索引用于一个查询
中的连接来改进数据取回的速度。
3.3创建索引的方式
• 自动:在一个表的定义中,当定义一个 PRIMARY KEY 或 UNIQUE 约束时,一个
唯一索引被自动创建
• 手动:用户能够在列上创建非唯一的索引来加速对行的访问。
3.4使用索引
过多也件坏事
在表上建立更多的索引并不意味者更快地查询, 在带索引的表上被提交的每个 DML 操
作意味者索引必须更新;与表联系的索引越多,对 Oracle 数据库的影响越大,Oracle 数据
库在每次 DML 操作之后必须更新所有的索引。
3.4.1什么时候创建索引
• 一个列包含一个大范围的值
• 一个列包含很多的空值
• 一个或多个列经常同时在一个 WHERE 子句中或一个连接条件中被使用
• 表很大,并且经常的查询期望取回少于百分之 2 到 4 的行。
3.4.2什么时候不创建索引
• 表很小
• 不经常在查询中作为条件被使用的列
• 大多数查询期望取回多于表中百分之 2 到 4 的行
• 表经常被更新
• 被索引的列作为表达式的的一部分被引用
3.5操作索引
3.5.1非唯一性索引的类型
oracle的非唯一性索引:单行索引,复合索引(组合索引),函数索引。
3.5.2创建索引语法
a.创建单行索引
create index emp_index on employees (last_name);
b.创建复合索引
create index dept_man_loc on departments (manager_id,location_id);
c.创建函数索引
create index dept_upper2 on departments (upper(department_name));
查询索引;
select ic.INDEX_NAME,ic.COLUMN_NAME,ic.COLUMN_POSITION,ix.TABLE_OWNER,ix.index_type
,ix.uniqueness from user_indexesix(数字字典表),user_ind_columns ic (数字字典表)whereix.INDEX_NAME=ic.INDEX_NAMEand ic.table_name='DEPARTMENTS';
3.5.4删除索引
Drop index 索引名;
4 同义词(Synonym)
4.1什么是同义词
同义词可以除去对象名必须带的方案限制,并提供给你一个可替换表名、视图名、序列
名和存储过程名或其它对象名。该方法对具有特别长的对象的名字很有用。
4.2创建和删除同义词
4.2.1创建同义词
create synonym em for employees;
4.2.2删除同义词
drop synonym em;
5 创建用户(User)
5.1什么是Oracle用户
Oracle 用户是用来连接数据库和访问数据库对象的。
5.2操作用户
5.2.1创建用户
需要具备创建用户的权限可以使用 sys 或者 system 用户来创建新用户
create user t_test identified by orocle;
使用指定表空间
create user t_text identified by oracle
default tablespace mysql temporary tablespace temp;
5.2.2删除用户的同时将该用户下的其他对象一并删掉
drop user u_test(用户名) cascaed(删除用户下的其他对象);
数据控制语言(DCL)
grant...授予用户权限
revork..撤销用户权限
1.1授予创建其他对象权限
– CREATE SESSION(登陆权限)
– CREATE TABLE(创表权限)
– CREATE SEQUENCE(序列权限)
– CREATE VIEW(视图权限)
– CREATE PROCEDURE
– UNLIMITED TABLESPACE(使用表空间权限)
※创建用户指定表空间并不代表可以使用表空间,必须授予使用表空间的权限。
2 撤销权限
Revoke 权限 from 用户。
3 Oracle中的角色
3.1什么是角色
角色是命名的可以授予用户的相关权限的组,该方法使得授予、撤回和维护权限容易的
多。一个用户可以使用几个角色,并且几个用户也可以被指定相同的角色。
3.2创建角色并且授予权限给角色
3.2.1创建角色
create role manager;
授予权限给一个角色
grant create session to manager;
授予角色给一个用户
grant manager to t_text;
※grant create any session to t_text;不能授权给角色,只能直接授予权限给用户。
删除角色
revoke manager from newbjsxt;