视图

视图的作用:

a 让查询返回的字段更容易理解。

b 对复杂select语句的封装。

c 安全性。视图可以单独授权。对于数据量巨大的表,可以创建视图仅仅返回前100条数据,将该视图select权限开放。但是不开放表的select权限。

--grant create view to resource;

--a 让查询返回的字段更容易理解
create or replace view vw_emp
as
select empno 员工号,ename 员工名,job 工作岗位,sal 工资 from emp; select *from vw_emp; --b 对复杂的sql语句进行封装
--、薪水大于1200的雇员,按照部门编号进行分组,分组后平均薪水必须大于1500,查询各分组的平均水平,按照工资的倒序进行排列。*
create or replace view vw_avg_sal
as
select deptno,avg(sal) avg_sal from emp
where sal>1200 group by deptno having avg(sal)>1500 order by avg(sal) desc; select * from vw_avg_sal; --c安全性 试图可以单独授权,对于数据量巨大的表,可以创建视图仅仅返回前100条数据,将该视图select权限开放.但是不开放表的select权限。
create or replace view vw_sub_emp
as
select empno,ename,job,mgr,deptno from emp; grant select on scott.vw_sub_emp to zhangsan; select * from scott.vw_sub_emp; --d将普遍使用的子查询转换成视图,将提高查询效率。

练习

--统计各部门员工数
create or replace view vw_countEmpByDept
as
select t.deptno 部门号,dname as 部门名,t.count_emp 员工数 from
(select deptno ,count(empno) count_emp from emp group by deptno) t
inner join dept on dept.deptno=t.deptno; select * from vw_countEmpByDept; --显示员工部门数量最多的部门的详细信息
--第一种
create view vw_max_count
as
select * from dept where dept.deptno=(
select 部门号 from vw_countEmpByDept where 员工数=
(select max(员工数) from vw_countEmpByDept)); select * from vw_max_count;
--第二种
select * from dept inner join (select deptno 部门号,count(empno) count_emp from emp group by deptno
having count(empno)=(
select max(mycount) from (select count(empno) mycount from emp group by deptno)
)) on dept.deptno=部门号; --获得平均工资最高部门的详细信息、(把子查询转换成视图,在关联视图中完成)
create view vw_avg_dept
as
select deptno 部门编号,avg(sal) 平均薪资 from emp group by deptno; select * from dept where deptno=(
select 部门编号 from vw_avg_dept where 平均薪资=
(select max(平均薪资) from vw_avg_dept));

注意:

A、oracle视图中的select语句可以含order排序 区别与sql server

B、视图仅仅是数据的另一种表现方式,本身没有引入新的数据

C、视图允许进行“增删改”,但强烈建议不对视图进行增删改。(我宁愿你们不知道这个点,但考试如果考到判断题要会答)


索引

“索引”--index。对数据记录起"目录"作用,加快查询速度。代价是消耗硬盘空间。

索引又分为聚集索引非聚集索引。区别是:表记录的排列顺序和与索引的排列顺序是否一致。

实例:聚集就是按字母查字典,字典页码和字母顺序一样。非聚集就是按偏旁部首查字典。偏旁部首顺序和字典页码顺序不一致。

具体区别:

1.聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个

2.聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。

3.聚集索引查询数据速度快,插入数据速度慢;非聚集索引反之。

就好像数组和链表的关系。

唯一索引:(聚集唯一和非聚集唯一:一般而言主键是聚集唯一,其他是非聚集唯一。

唯一索引和唯一约束的关系:索引是具有物理结构的,只要唯一索引在就不能存放相同值,唯一约束是建立在唯一索引基础上的逻辑结构。所以只要表t的字段a满足“唯一约束”,那么就会自动建立“唯一索引”。一般而言这两种用法效果相同没什么区别。

注意:一个表可以含有多个唯一索引。

create unique index 索引名 on 表名.(字段名) --创建索引

alter index 索引名 rebuild; --重建索引

--索引 index,对数据记录其目录作用,加快查询速度,代价是消耗硬盘空间。
create table myuser(
id number primary key,--主键约束,number 默认为(12,2)
uname varchar2(20) not null,
password varchar(20) not null check(length(password)>=6) --检查约束
) create unique index uname_idx on myuser(uname); insert into myuser values(1,'zhangsan','123456'); insert into myuser values(2,'zhangsan','123456'); alter index uname_idx rebuild;
drop index uname_idx; select * from myuser;

序列

序列:

实现多张表的主键统一管理;

实现基于字符串主键的递增规则

CREATE SEQUENCE sequence  //创建序列名称

[INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

​       [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue

​       [{MAXVALUE n | NOMAXVALUE}] //最大值

​       [{MINVALUE n | NOMINVALUE}] //最小值

​       [{CYCLE | NOCYCLE}] //循环/不循环  即达到最大后从头开始

​       [{CACHE n | NOCACHE}];//分配并存入到内存中
--序列
--实现多张表主键的统一管理
--实现基于字符串主键的递增规则 create sequence my_se --创建序列名称(最简单的序列,第一句就行了,下面的是可选)
increment by 1 --递增的序列值
start with 1 --开始的值
maxvalue 999999999
--minvalue n | nominvalue --最小值
nocycle --循环、不循环 就是到达最大值之后从头开始
cache 20 --分配并存入内存中 -- my_se.currval 当前值
-- my_se.nextval 下一个值 select my_se.nextval from dual;--要先启动序列,必须用nextval
select my_se.currval from dual; --同一次查询中两次序列取值相同
select my_se.nextval,my_se.nextval from dual; --序列作用:产生递增的不重复的字段,通常用于生成主键的值。用在给主键赋值
--案例一 实现多张表的主键的统一管理
--表:福建动车系统 、广东动车系统 、江西动车系统
--要求:国家要求所有动车系统的票根符合统一规则,可以采用公开的一个序列对象进行统一编号。
create table FJtrain(
tid number(10) primary key,
tname varchar2(20)
);
create table GDtrain(
tid number(10) primary key,
tname varchar2(20)
);
create table JXtrain(
tid number(10) primary key,
tname varchar2(20)
); insert into FJtrain values(my_se.nextval,'厦门-福州');
insert into GDtrain values(my_se.nextval,'深圳-广州');
insert into JXtrain values(my_se.nextval,'南昌-赣州');
select * from FJtrain;
select * from GDtrain;
select * from JXtrain; --案例二 实现基于字符串主键的递增规则
--要求:主键是字符串,如何用序列去做改造 create table stu(
sno varchar2(10) primary key,
sname varchar2(20) not null
); insert into stu values('s'||my_se.nextval,'张老大'); insert into stu values('s'||my_se.nextval,'李老二'); insert into stu values('s'||my_se.nextval,'赵老二'); select * from stu;

oracle 逻辑对象的更多相关文章

  1. Oracle 数据库对象

    数据库对象是数据库的组成部分,常常用CREATE命令进行创建,可以使用ALTER命令修改,用DROP执行删除操作.前面已经接触过的数据库对象有表.用户等. 今天将学习更多的Oracle数据库对象: 同 ...

  2. Oracle数据库对象,同义词、序列、视图、索引

    数据库对象简介 Oracle 数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 其他数据库对象包括: 同义词是现有对象的一个别名. 简化SQL语句 隐藏对象的名称和所有者 提 ...

  3. Oracle 逻辑体系

    Oracle 逻辑体系 主题 Oracle 逻辑体系 参考资料   Oracle 逻辑体系   表空间.模式.用户.段.区.块 Oracle中的数据逻辑上存储于表空间,物理上则存储于属于表空间tabl ...

  4. Oracle 逻辑存储结构

    一.总述 逻辑存储结构是 Oracle 数据库存储结构的核心内容,对 Oracle 数据库的所有操作都会涉及逻辑存储结构.逻辑存储结构是从逻辑的角度分析数据库的组成,是对数据存储结构在逻辑概念上的划分 ...

  5. Oracle数据库对象(表空间/同义词/序列/视图/索引)

    数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...

  6. oracle逻辑导入小错:提示无法创建日志提示

    ***********************************************声明*************************************************** ...

  7. Oracle查看对象空间使用情况show_space

    tom大神写了一个用于查看Oracle数据库对象空间使用情况. 以下演示一下怎样使用: –工具源代码 CREATE OR REPLACE PROCEDURE show_space(p_segname ...

  8. 获取oracle数据库对象定义

    在oracle中,使用DBMS_METADATA包中的GET_DDL函数来获得对应对象的定义语句.GET_DDL函数的定义如下: DBMS_METADATA.GET_DDL ( object_type ...

  9. 逻辑对象中时间类型 保存时 隐藏bug

    开发功能中的一些逻辑对象中的一些时间 属性,在保存数据库时有一个隐藏的bug,假如 我vo属性定义的就是date 类型,那我定时保存数据库时可能就会出错,eq:假如这个属性隔天要重置一些东西,表中这个 ...

随机推荐

  1. 【技术博客】Django+uginx+uwsgi框架的服务器部署

    1.登录服务器 使用ssh来直接登录到服务器terminal进行操作,推荐使用XShell和XFtp来进行远程登录和文件传输. 2.运行环境准备 本组获得的华为云服务器为ubuntu16.04版本,先 ...

  2. 使用MeadCo's ScriptX控件做WEB打印

    官方网址:http://www.meadroid.com/scriptx/index.asp MeadCo's ScriptX控件有两种使用方式,一种是做为免费版本使用,一种是做为收费版本使用,免费版 ...

  3. 直接从ADB接出串口调试

    1,从硬件接出串口线 2,用串口工具连接上串口工具,串口工具地址:https://files.cnblogs.com/files/senior-engineer/%E4%B8%B2%E5%8F%A3% ...

  4. redhat 6安装python 3.7.4报错ModuleNotFoundError: No module named '_ctypes' make: *** [install] Error 1

    问题描述: 今天在测试环境中,为了执行脚本,安装下python3命令,在执行make install的时候报错: ModuleNotFoundError: No module named '_ctyp ...

  5. redis支持远程接入的安全防护问题

    如果我们没有启用保护模式,支持远程接入,启用默认端口6379,而且是用root用户启动的,那么基本上redis就是在裸奔了,人家分分钟搞你没商量. 我们模拟一下,现在机器A(ip假设为10.100.1 ...

  6. springboot放到linux启动报错:The temporary upload location [/tmp/tomcat.8524616412347407692.8111/work/Tomcat/localhost/ROOT/asset] is not valid

    1.背景 笔者的springboot在一个非root用户环境下运行,这种环境下可以保证不被潜在的jar/开源框架漏洞提权. 比如在防火墙上把外网访问来的443端口映射到本地8443的java web端 ...

  7. Android最新版本号与API级别对应关系

     Android版本号与API级别对应关系表 名称 版本号 API等级 发布时间 BuildVersion 2012-11-01 BuildVersionCodes.JellyBeanMr1 Jell ...

  8. SpringMVC中css,js,图片等静态资源被拦截的解决办法

    一.静态资源的存放路径 css,js,图片等静态资源存放在项目的路径必须为 二.html.jsp导入静态资源文件 html.jsp页面中的导入静态资源文件: js: css: 图片: 二.web.xm ...

  9. Mac下 homebrew 安装mysql

    操作步骤 安装homebrew brew install mysql 安装mysql 安装完成之后,可以运行命令启动mysql服务 mysql.server start 然后输入命令设置密码 mysq ...

  10. IIS部署FLASK网站

    在 Windows 平台部署基于 Python 的网站是一件非常折腾的事情,Linux/Unix 平台下有很多选择,本文记录了 Flask 部署到 IIS 的主要步骤,希望对你有所帮助. 涉及工具和平 ...