`

ORACLE数据库总结05

 
阅读更多

 

视图

数据库对象之一

视图在SQL语句中体现的角色与表一致

但是视图不是表,只是对应一条SELECT语句查询结果集。

 

CREATE VIEW v_emp_b_10

AS

SELECT empno,ename,sal,deptno

FROM emp_brown

WHERE deptno = 10;

 

DESC v_emp_b_10;

 

查看视图数据

SELECT * FROM v_emp_b_10;

 

 

视图对应的子查询可以为字段添加别名,

那么视图对应的该字段就以别名命名。

当对应的子查询的某个字段是函数或表达式时

那么该字段必须使用别名。

 

CREATE OR REPLACE VIEW v_emp_brown_10

AS

SELECT empno id,ename name,

       sal salary,deptno

FROM emp_brown

WHERE deptno = 10;

 

desc v_emp_b_10;

 

drop VIEW v_emp_brown_10;

SELECT * FROM v_emp_brown_10;

SELECT * FROM emp_brown;

 

视图根据对应的查询语句不同分为

简单视图:查询单一的一张表,且查询的字段

      不包含函数,表达式,去重,分组等对数据进行加工的操作

复杂视图:与简单视图相反的就是复杂视图

连接视图:查询的数据来自多张表,连接视图算作复杂视图的一种

 

可以对视图进行DML操作,但是仅能对简单视图进行。

对视图进行DML操作就是对视图数据来源的基础表进行的,

所以还不能违反基础表的约束条件   

 

INSERT INTO v_emp_brown_10

(id,name,salary,deptno)

VALUES

(1001,'JACK',5000,10);

 

对视图进行DML操作后,银行的数据

若视图看不到,则会对基表数据污染!

 

UPDATE v_emp_brown_10

SET deptno=20;

 

为视图添加检查选项后可以避免对视图进行DML操作后污染基表

 

CREATE OR REPLACE VIEW v_emp_brown_10

AS

SELECT empno id,ename name,

       sal salary,deptno

FROM emp_brown

WHERE deptno = 10

WITH CHECK OPTION;

 

为视图添加只读选项后,该视图仅能查询不能进行任何的DML操作。

CREATE OR REPLACE VIEW v_emp_brown_10

AS

SELECT empno id,ename name,

       sal salary,deptno

FROM emp_brown

WHERE deptno = 10

WITH READ ONLY;

 

在数据字典USER_OBJECTS中查询所有视图名称:

SELECT object_name FROM user_objects

WHERE object_type = 'VIEW';

 

在数据字典USER_VIEWS中查询指定视图:

SELECT text FROM user_views 

WHERE view_name = 'V_EMP_BROWN_10';

 

SELECT table_name

FROM user_tables;

 

 

复杂视图

创建一个记录每个部门的部门号,部门名称,平均工资,工资总和,

最高工资,最低工资的视图v_emp_dept_sal_info

 

CREATE VIEW v_emp_dept_sal_info_brown

AS

SELECT d.deptno,d.dname,avg(e.sal) avg_sal,sum(e.sal) sum_sal, 

max(e.sal) max_sal,min(e.sal) min_sal 

FROM emp_brown e ,dept_brown d

WHERE e.deptno = d.deptno

GROUP BY d.deptno,d.dname;

 

SELECT * FROM v_emp_dept_sal_info_brown;

 

查看高于自己所在部门平均工资?

SELECT e.ename,e.sal,e.deptno

FROM emp_brown e,(SELECT AVG(sal) avg_sal,deptno

                  FROM emp

                  GROUP BY deptno) t

WHERE e.deptno=t.deptno

AND e.sal>avg_sal

 

简单写法:

SELECT e.ename,e.sal,e.deptno

FROM emp_brown e JOIN v_emp_dept_sal_info_brown v

ON e.deptno=v.deptno

WHERE e.sal>v.avg_sal

 

复杂视图不允许DML操作,会报错。

SELECT * FROM v_emp_dept_sal_info_brown

 

删除视图v_emp_10:

DROP VIEW v_emp_b_10;

 

删除视图不会影响基表数据,但是删除视图中的数据(DML操作)

会影响基表数据。

 

 

序列

数据库对象之一

序列是根据制定的规则生成一系列数字

通常使用序列生成的数字为表的主键

字段提供值使用。、

 

CREATE SEQUENCE seq_emp_brown_id

START WITH 1

INCREMENT BY 1

 

序列提供了两个伪列:

NEXTVAL:获取序列下一个数字

若是刚创建的序列,从START WITH开始获取,

然后每次获取时是根据步长进行计算得到。

NEXTVAL会导致序列步进,且序列不能回退!

 

CURRVAL:获取序列当前值(最后一次使用NEXTVAL生成的的数字)

新创建的序列至少调用一次NEXTVAL后才可以使用CURRVAL

 

SELECT seq_emp_brown_id.NEXTVAL

FROM dual;

 

为EMP表主键字段提供值

INSERT INTO emp_brown

(empno,ename,sal,job,deptno)

VALUES

(seq_emp_b.NEXTVAL,'JACK',3000,'CLARK',20)

 

INSERT INTO emp_brown

(empno,ename,sal,job,deptno)

VALUES

(seq_emp_brown_id.NEXTVAL,'ROSE',8000,'MANAGER',20)

 

select * from emp_brown 

 

删除序列

DROP SEQUENCE sql_emp_id;

 

 

索引

数据库对象之一

索引用于提高查询效率

索引的内建工作对用户是透明的,由数据库自行维护,

我们只需要指定是否添加索引。

索引是为表中字段添加的。当一个字段经常出现在WHERE中作为过滤条件,

或ORDER BY或DISTINCT中时可以为其添加索引提高查询效率

 

CREATE INDEX idx_emp_brown_ename

ON emp_brown(ename)

 

SELECT ename,job,deptno

FROM emp_brown

WHERE ename='SCOTT'

 

多列索引

CREATE INDEX idx_emp_brown_job_sal ON emp(job, sal);

 

SELECT empno, ename, sal, job FROM emp_brown

ORDER BY job, sal;

 

如果需要在emp表的ename列上执行大小写无关搜索,可以在此列上建立一个基于UPPER函数的索引:

CREATE INDEX emp_ename_upper_idx 

ON emp(UPPER(ename));

 

 

修改和删除索引

如果经常在索引列上执行DML操作,需要定期重建索引,提高索引的空间利用率,语法如下:

ALTER INDEX index_name REBUILD;

重建索引idx_emp_ename:

ALTER INDEX idx_emp_ename REBUILD;

当一个表上有不合理的索引,会导致操作性能下降,删除索引的语法:

DROP INDEX index_name;

删除索引idx_emp_ename:

DROP INDEX idx_emp_ename;

 

 

合理使用索引提升查询效率

为提升查询效率,创建和使用索引的原则:

 

为经常出现在WHERE子句中的列创建索引

为经常出现在ORDER BY、DISTINCT后面的字段建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致

为经常作为表的连接条件的列上创建索引

 

不要在经常做DML操作的表上建立索引

不要在小表上建立索引

限制表上的索引数目,索引并不是越多越好

删除很少被使用的、不合理的索引

 

 

约束

NOT NULL

NOT NULL约束是一个列级约束,即:为某个字段

添加该约束时候必须是在定义该字段的同时进行。

表创建后再为某字段添加非空约束时,也要在修改字段的时候进行。

CREATE TABLE employees_brown(

eid NUMBER(6),

name VARCHAR2(30) NOT NULL,

salary NUMBER(7,2),

hiredate DATE CONSTRAINT employees_brown_hiredate_nn NOT NULL);

 

desc employees_brown;

 

修改表时添加非空约束

ALTER TABLE employees_brown

MODIFY(eid NUMBER(6) NOT NULL);

 

取消非空约束

如果业务要求取消某列的非空约束,可以采用重建表或者修改表的方式:

ALTER TABLE employees_brown 

MODIFY (eid NUMBER(6) null);

 

唯一性约束

唯一性约束可以要求某个字段在表中任何

集中的值不能相同,NULL值除外。

CREATE TABLE employees1_brown (

  eid NUMBER(6) UNIQUE,

  name VARCHAR2(30),

  email VARCHAR2(50),

  salary NUMBER(7, 2),

  hiredate DATE,

  CONSTRAINT employees_brown_email_uk UNIQUE(email)

);

 

desc employees1_brown;

 

INSERT INTO employees1_brown

(eid,name,email)

VALUES

(1,'JACK','aba@qq.com')

 

SELECT * FROM employees1_brown

delete FROM employees1_brown

 

ALTER TABLE employees1_brown

ADD CONSTRAINT employees1_brown_name_uk UNIQUE(name);

 

 

主键约束

主键约束只能建立在单列上,并且一张表

只能有一个主键约束,主键约束可以保证

该字段非空且唯一

CREATE TABLE employees2_brown (

  eid NUMBER(6) PRIMARY KEY,

  name VARCHAR2(30),

  email VARCHAR2(50),

  salary NUMBER(7, 2),

  hiredate DATE

)

 

INSERT INTO employees2_brown

(eid,name)

VALUES

(01,'JACK');

 

SELECT * FROM employees2_brown;

 

ALTER TABLE employees3_brown

ADD CONSTRAINT employees1_brown_eid_pk PRIMARY KEY(eid);

 

ALTER TABLE employees2_brown

ADD CONSTRAINT employees2_brown_salary_check

CHECK(salary > 2000);

 

INSERT INTO employees2_brown(eid,name,salary)

VALUES(1236,'donna noble',2500);

 

UPDATE employees2_brown SET salary = 1500

WHERE eid = 1236;

分享到:
评论

相关推荐

    ORACLE数据库学习总结资料.pdf

    Oracle数据库学习总结资料.pdf Oracle数据库学习总结资料.pdf 是一份关于 Oracle 数据库的学习总结资料,涵盖了 Oracle 数据库的各个方面,包括 Oracle 的简介、简单查询、标量函数和算数运算、多表查询、列函数和...

    Oracle数据库总结

    Oracle 数据库总结 Oracle 数据库是甲骨文公司的一款关系数据库管理系统,是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。下面是 Oracle 数据库的总结...

    查看登录oracle数据库用户记录.docx

    "查看登录 Oracle 数据库用户记录" Oracle 数据库是一个强大的关系型数据库管理系统,提供了强大的数据存储和管理功能。为了管理和监控数据库的访问情况,需要对登录 Oracle 数据库的用户记录进行跟踪和查看。本文...

    oracle数据库日志查看方法

    ### Oracle数据库日志查看方法详解 #### 一、概述 Oracle数据库是企业级应用中广泛使用的数据库管理系统之一,为了确保数据库系统的稳定运行和快速定位问题,掌握Oracle数据库日志查看方法至关重要。本文将详细...

    Oracle数据库知识点总结 Oracle数据库架构与组件学习攻略

    Oracle数据库知识点总结 章节目录 一、Oracle数据库概述 二、Oracle数据库架构与组件 三、SQL语言基础 四、PL/SQL编程 五、数据库对象管理 六、数据备份与恢复 七、性能优化与安全管理 八、如何学习Oracle数据库 九...

    oracle数据库

    oracle数据库总结oracle数据库总结oracle数据库总结oracle数据库总结

    oracle数据库总结.sql

    oracle数据库总结

    Oracle数据库的启停

    Oracle 数据库的启停 Oracle 数据库的启停是数据库管理员的重要任务之一。启停数据库的过程可以细分为三个步骤:启动实例、挂载数据库、打开数据库。下面将详细讲解 Oracle 数据库的启停过程。 启动数据库 启动...

    ORACLE数据库设计与优化

    总结,Oracle数据库设计与优化是一个涉及多方面知识的复杂过程,包括但不限于物理结构设计、SQL优化、索引策略、存储过程使用、性能监控以及备份恢复策略。理解这些核心概念并灵活应用,将有助于构建高效、稳定且...

    labview 调用oracle数据库

    总结,LabVIEW调用Oracle数据库涉及的关键点有:使用ODBC连接数据库、构建和执行SQL命令、创建和操作数据库表。理解这些概念和步骤,将有助于在LabVIEW环境中有效地管理和操作Oracle数据库。在实际应用中,还要考虑...

    C#版Oracle数据库通用操作类

    ### C# 版 Oracle 数据库通用操作类解析 在现代软件开发中,数据库操作是必不可少的一部分,而 C# 结合 Oracle 数据库的应用尤为广泛。本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。...

    Oracle数据库开发和设计规范

    本文档总结了 Oracle 数据库开发和设计规范的主要内容,包括命名约定、表名规则、存储过程规则、视图规则、索引规则、序列规则、主键规则和外键规则等。 一、命名约定 Oracle 数据库开发和设计规范中,命名约定是...

    Oracle-新建Oracle数据库并连接(图文,详细).docx

    新建Oracle数据库并连接详细教程 在这篇教程中,我们将学习如何新建Oracle数据库并连接到该数据库。该教程分为两部分:新建Oracle数据库和连接到数据库。 新建Oracle数据库 新建Oracle数据库需要使用Database ...

    Oracle数据库命令 个人总结

    "Oracle数据库命令个人总结" Oracle数据库命令个人总结是徐博文在2014年3月整理的关于Oracle数据库的命令和心得的总结。下面是从该总结中提取的重要知识点: 1. 查询数据库数据文件的基本字段信息:使用DESC DBA_...

    oracle数据库克隆总结

    ### Oracle数据库克隆总结 #### 一、Oracle数据库克隆概述 在企业级应用中,Oracle数据库因其稳定性和高效性而被广泛采用。随着业务需求的变化和技术的发展,Oracle数据库克隆成为了维护和管理数据库的一项重要...

    access数据库MDB数据文件导入oracle数据库操作步骤.pdf

    Access 数据库 MDB 数据文件导入 Oracle 数据库操作步骤 Access 数据库 MDB 文件是 Microsoft Access 应用程序的数据库文件格式,而 Oracle 数据库是关系数据库管理系统。将 Access 数据库 MDB 文件导入 Oracle ...

    oracle数据库学习总结.doc.docx

    Oracle数据库是一种广泛应用于企业级应用中的关系型数据库管理系统,由美国甲骨文公司开发。在学习Oracle数据库的过程中,我们可以从以下几个关键知识点入手: 1. **可移植性和兼容性**: Oracle数据库因其采用...

    Oracle到Mysql数据库迁移总结

    Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结

Global site tag (gtag.js) - Google Analytics