视图
数据库对象之一
视图在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 数据库的学习总结资料,涵盖了 Oracle 数据库的各个方面,包括 Oracle 的简介、简单查询、标量函数和算数运算、多表查询、列函数和...
Oracle 数据库总结 Oracle 数据库是甲骨文公司的一款关系数据库管理系统,是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。下面是 Oracle 数据库的总结...
"查看登录 Oracle 数据库用户记录" Oracle 数据库是一个强大的关系型数据库管理系统,提供了强大的数据存储和管理功能。为了管理和监控数据库的访问情况,需要对登录 Oracle 数据库的用户记录进行跟踪和查看。本文...
### Oracle数据库日志查看方法详解 #### 一、概述 Oracle数据库是企业级应用中广泛使用的数据库管理系统之一,为了确保数据库系统的稳定运行和快速定位问题,掌握Oracle数据库日志查看方法至关重要。本文将详细...
Oracle数据库知识点总结 章节目录 一、Oracle数据库概述 二、Oracle数据库架构与组件 三、SQL语言基础 四、PL/SQL编程 五、数据库对象管理 六、数据备份与恢复 七、性能优化与安全管理 八、如何学习Oracle数据库 九...
oracle数据库总结oracle数据库总结oracle数据库总结oracle数据库总结
oracle数据库总结
Oracle 数据库的启停 Oracle 数据库的启停是数据库管理员的重要任务之一。启停数据库的过程可以细分为三个步骤:启动实例、挂载数据库、打开数据库。下面将详细讲解 Oracle 数据库的启停过程。 启动数据库 启动...
总结,Oracle数据库设计与优化是一个涉及多方面知识的复杂过程,包括但不限于物理结构设计、SQL优化、索引策略、存储过程使用、性能监控以及备份恢复策略。理解这些核心概念并灵活应用,将有助于构建高效、稳定且...
总结,LabVIEW调用Oracle数据库涉及的关键点有:使用ODBC连接数据库、构建和执行SQL命令、创建和操作数据库表。理解这些概念和步骤,将有助于在LabVIEW环境中有效地管理和操作Oracle数据库。在实际应用中,还要考虑...
### C# 版 Oracle 数据库通用操作类解析 在现代软件开发中,数据库操作是必不可少的一部分,而 C# 结合 Oracle 数据库的应用尤为广泛。本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。...
本文档总结了 Oracle 数据库开发和设计规范的主要内容,包括命名约定、表名规则、存储过程规则、视图规则、索引规则、序列规则、主键规则和外键规则等。 一、命名约定 Oracle 数据库开发和设计规范中,命名约定是...
新建Oracle数据库并连接详细教程 在这篇教程中,我们将学习如何新建Oracle数据库并连接到该数据库。该教程分为两部分:新建Oracle数据库和连接到数据库。 新建Oracle数据库 新建Oracle数据库需要使用Database ...
"Oracle数据库命令个人总结" Oracle数据库命令个人总结是徐博文在2014年3月整理的关于Oracle数据库的命令和心得的总结。下面是从该总结中提取的重要知识点: 1. 查询数据库数据文件的基本字段信息:使用DESC DBA_...
### Oracle数据库克隆总结 #### 一、Oracle数据库克隆概述 在企业级应用中,Oracle数据库因其稳定性和高效性而被广泛采用。随着业务需求的变化和技术的发展,Oracle数据库克隆成为了维护和管理数据库的一项重要...
Access 数据库 MDB 数据文件导入 Oracle 数据库操作步骤 Access 数据库 MDB 文件是 Microsoft Access 应用程序的数据库文件格式,而 Oracle 数据库是关系数据库管理系统。将 Access 数据库 MDB 文件导入 Oracle ...
Oracle数据库是一种广泛应用于企业级应用中的关系型数据库管理系统,由美国甲骨文公司开发。在学习Oracle数据库的过程中,我们可以从以下几个关键知识点入手: 1. **可移植性和兼容性**: Oracle数据库因其采用...
Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结Oracle到Mysql数据库迁移总结