1 视图(View)

1.1什么是视图

可以通过创建表的视图来表现数据的逻辑子集或数据的组合。视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变表中的数据。视图基于其上的表称为基表。

1.2视图的优越性

• 视图限制数据的访问,因为视图能够选择性的显示表中的列。

• 视图可以用来构成简单的查询以取回复杂查询的结果。例如,视图能用于从多表中查询信息,而用户不必知道怎样写连接语句。

• 视图对特别的用户和应用程序提供数据独立性,一个视图可以从几个表中取回数据。

1.3视图类型

简单视图和复杂视图

1.4简单视图 和 复杂视图的区别

视图有两种分类:简单和复杂,基本区别涉及 DML (INSERT、UPDATE 和 DELETE)操作。

简单视图:

− 数据仅来自一个表

− 不包含函数或数据分组

− 能通过视图执行 DML 操作

复杂视图

− 数据来自多个表

− 包含函数或数据分组

− 不允许通过视图进行 DML 操作

1.5创建简单视图

create view temp_emp as select e.employee_id,e.last_name,e.salary from employees e;

1.6用子查询中的列别名创建视图

如果在创建视图的查询语句中含有列别名,那么列别名将作为视图的列名。

create view emp as select e.employee_id id,e.last_name name,12*e.salary
sal from employees e;

1.7 创建复杂视图

create view dept_name1(name,minsal,maxsal,avgsal) as select d.department_name,min(e.salary) ,max(e.salary) ,avg(e.salary)avg from employees e,departments d where e.department_id =d.department_id group by d.department_name;

1.8视图中 DML 操作的执行规则

如果视图中包含下面的部分就不能修改数据:

• 组函数

• GROUP BY 子句

• DISTINCT 关键字

• 用表达式定义的列

1.9拒绝 DML 操作

创建一个简单视图,包含 employees 表中的所有数据,单该视图拒绝 DML 操作。

create view v_emp as select * from employees with read only;

1.10内建视图

• 内建视图是一个带有别名 (或相关名) 的可以在 SQL 语句中使用的子查询。

• 一个主查询的在 FROM 子句中指定的子查询就是一个内建视图。

内建视图:内建视图由位于 FROM 子句中命名了别名的子查询创建。该子查询定义一个可以在主查询中引用数据源。

示例

显示那些雇员低于他们部门最高薪水的雇员的名字、薪水、部门号和他们部门最高的薪水。

select em.last_name,em.salary,em.department_id, e.maxsal from employees em ,(select e.department_id, max(e.salary) maxsal from employees e group by e.department_id)e where em.department_id = e.department_id and em.salary < e.maxsal;

1.11Top-N 分析

Top-N 查询在需要基于一个条件,从表中显示最前面的 n 条记录或最后面的 n 条记录时是有用的。该结果可以用于进一步分析,例如,用 Top-N 分析你可以执行下面的查询类型:

1.11.2 执行“Top-N”分析

Top-N 查询使用一个带有下面描述的元素的一致的嵌套查询结构:

•子查询或者内建视图产生数据的排序列表,该子查询或者内建视图包含 ORDER BY 子句来确保排序以想要的顺序排列。为了取回最大值,需要用 DESC 参数。

• 在最后的结果集中用外查询限制行数。外查询包括下面的组成部分:

——ROWNUM 伪列,它为从子查询返回的每一行指定一个从 1 开始的连续的值

—— 一个 WHERE 子句,它指定被返回的 n 行,外 WHERE 子句必须用一个<或者<=操作。

示例

从 EMPLOYEES 表中显示挣钱最多的 3 个人的名字及其薪水。

select rownum ,last_name,salary from(select last_name, salary from employees order by salary desc) where rownum <=3;

1.12Oracle 的分页查询

当查询的结果集数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成。解决这个问题的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一部分数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。

分页查询原则:

在内建视图中通过 rownum 伪劣值的判断来指定获取数据的数量。

示例

查询雇员表中数据,每次只返回 10 条数据。

select * from (select rownum rn,e.* from employees e) em where em.rn between 11 and 20;

2 序列(Sequence)

2.1什么是序列

序列是用户创建的数据库对象,序列会产生唯一的整数。序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的。序列由一个 Oracle 内部程序产生并增加或减少。

序列是一个节省时间的对象,因为它可以减少应用程序中产生序列程序的代码量。序列号独立于表被存储和产生,因此,相同的序列可以被多个表使用。

2.2创建序列

在语法中

increment by n 指定序列号之间的间隔,在这儿 n 是一个整数 (如果该子句被省

略,序列增量为 1)

start with n 指定要产生的第一个序列数 (如果该子句被省略,序列从 1 开始)

maxvalue n 指定序列能产生的最大值

nomaxvalue n对于升序序列指定 10^27 为最大值,对于降序序列指定-1 为最大值(这是默认选项)

minvalue n 指定最小序列值

nominvalue n 对于升序序列指定 1 为最小值,对于降序序列指定-(10^26)为最小值(这是默认选项)

cycle/nocycle 指定序列在达到它的最大或最小值之后,是否继续产生(NOCYCLE是默认选项)

cache/nocache 指定 Oracle 服务器预先分配多少值,并且保持在内存中(默认情况下,Oracle 服务器缓冲 20 个值)

示例

创建一个序列名称为:dept_seq,增长间隔为 10,从 120 开始,最大值为 9999,不缓存。不循环使用。

create sequence dept_seq increment by 10 start with 120 maxvalue 9999 nocache nocycle;

2.3查询序列

通过数据字典表user_sequences查询。

select sequence_name,increment_by,max_value,min_value,last_number from user_sequences;

2.4使用序列

NEXTVAL 和 CURRVAL 伪列

• NEXTVAL 返回下一个可用的序列值,它每次返回一个唯一的被引用值,即使对于不同的用户也是如此

• CURRVAL 获得当前的序列值

• 在 CURRVAL 获得一个值以前,NEXTVAL 对该序列必须发布

示例

在 location ID 2500 中插入一个新部门名称 Support。

insert into departments(department_id,department_name,location_id) values(dept_seq.nextval,'Support',2500);

查询当前序列号

select deptseq.nextval,dept_seqval from dual;

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创建索引语法

创建单行索引

create index emp_index on employees(last_name);

创建复合索引

create index dept_man_loc on departments(manager_id,location_id);

创建函数索引

create index dept_upper2 on departments(upper(department_name));

3.6查询索引

利用数据字典表

示例

select IC.INDEX_NAME ,ic.COLUMN_NAME,ic.COLUMN_POS ITION,ix.uniqueness from user_indexes ix ,user_ind_columns ic where ix.index_name = ic.INDEX_NAME and ic.TABLE_NAME ='DEPARTMENTS';
select * from user_indexes where table_name='表名';
select * from user_ind_columns where index_name='索引名';

4 同义词(Synonym)

4.1什么是同义词

同义词可以除去对象名必须带的方案限制,并提供给你一个可替换表名、视图名、序列名和存储过程名或其它对象名。该方法对具有特别长的对象的名字很有用。

4.2创建和删除同义词

create synonym em for employees;
drop synonym em;

5 创建用户(User)

5.1什么是 Oracle 用户

Oracle 用户是用来连接数据库和访问数据库对象的。

5.2创建用户

需要具备创建用户的权限可以使用 sys 或者 system 用户来创建新用户

create user u_test identified by 123456;

5.3使用指定表空间创建用户

create user u_bjsxt identified by 123456 default tablespace bjsxt temporary tablespace temp;

5. 数据控制语言(DCL)

grant...授予用户权限

revork..撤销用户权限

5 .1授予系统权限

5.1.1授予创建其他对象权限

– CREATE SESSION (会话)

– CREATE TABLE (创建表)

– CREATE SEQUENCE(创建序列)

– CREATE VIEW(创建视图)

– CREATE PROCEDURE

– UNLIMITED TABLESPACE(永久表空间权限)

为 u_bjsxt 用户分配创建表、创建视图、创建序列权限以及使用永久表空间权限。

grant create table ,create view ,create sequence ,unlimited tablespace to u_bjsxt;

5.2 撤销权限

Revoke 权限 from 用户。

revoke create table from u_bjsxt;

5.3 Oracle 中的角色

角色是命名的可以授予用户的相关权限的组,该方法使得授予、撤回和维护权限容易的

多。一个用户可以使用几个角色,并且几个用户也可以被指定相同的角色。

5.4创建角色并且授予权限给角色

创建角色

create role manager;

授予权限给一个角色

grant create session,create table,create view,create sequence to manager;

5.5授予一个角色给用户

create user newbjsxt identified by oracle default tablespace bjsxt;
grant unlimited tablespace to newbjsxt;
grant manager to newbjsxt;

5.6撤销用户角色

revoke manager from newbjsxt;

sql查询百分之20到百分之40的数据_数据库基础学习——SQL语言知识总结(6)相关推荐

  1. sql查询出1到12月的数据形成报表

    sql查询出1到12月的数据 每个月的总量 形成报表 SELECT * FROM ( SELECT COUNT( 1 ) AS January FROM tb_customer c WHERE YEA ...

  2. 【校招VIP】数据库基础之sql五十道题

    考点介绍: 数据库在测试工程师的面试过程中也是常问的一项.面试有一定的层次性,如bat级别公司每个点都会深入,而有些公司则只会问到表层,所以每个领域都分为必须掌握和深入了解这两个部分. 本期分享的数据 ...

  3. mysql删除新添加数据_MySQL数据库基础(六)——SQL插入、更新、删除操作

    MySQL数据库基础(六)--SQL插入.更新.删除操作 一.插入数据 1.为表的所有字段插入数据 使用基本的INSERT语句插入数据要求指定表名称和插入到新记录中的值. INSERT INTO ta ...

  4. 零基础学习SQL第一节

    零基础学习SQL第一大节 第一节:数据库与SQL 我们身边的数据库 大家都有过下面这样的经历吧? 收到曾经为自己诊治过的牙医寄来的明信片,上面写着"距上次检查已有半年,请您再来做个牙齿健康查 ...

  5. 五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  6. oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  7. 五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  8. mysql及格率70以上_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划...

    作者 | 董旭阳TonyDong,CSDN 博客专家 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN 博客 下面是 5 个关于索引和 SQL 查询性能的测试题:其中 4 个 ...

  9. sql查询计算机系学生的学号和姓名,实验5数据库的简单查询操作答案.docx

    (6) 从学生信息表中查询计算机系年龄小于 (6) 从学生信息表中查询计算机系年龄小于 20 的学生的信息 SQL 代码如下: (2) (2) 从学生信息表中查询所有学生的姓名和学号信息并分别 实验 ...

最新文章

  1. Linux解压rar、zip、war、tar文件
  2. 信用逾期3年是不是一定会坐牢?
  3. lodop转到其他html页面,Lodop实现打印功能
  4. JVM垃圾收集器与内存分配策略学习总结
  5. 组合数学基本工具-- 排列与组合以及简单公式
  6. 线下实战—6月25号(深圳)
  7. mysql 数据操作 单表查询 group by 注意
  8. Cabin, 手机端的Kubernetes管理app
  9. IBM发布人工智能显微镜,可检测海洋水资源
  10. 院友故事丨联培博士陈冬冬:顶会百发百中?博导关系?我的PhD经验之谈
  11. LINUX打印机报错:ipp error(1034, client-error-document-format-not-supported)
  12. QTreeView+自定义Model实现示例
  13. PHP腾讯云短信接口
  14. nginx反向代理负载均衡功能
  15. java instrument_JAVA Instrument技术实战以及在QTrace中的应用
  16. 用python预测小孩的身高_预测孩子身高的实用方法
  17. 需求:世界最高峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够打的纸,它的厚度是0.1毫米 请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
  18. 30行Python代码实现蚂蚁森林自动偷能量
  19. python产品作者如何去掉_python去除\ufeff、\xa0、\u3000
  20. cad怎么画立体图形教学_cad怎么绘立体图?

热门文章

  1. 2021年,投身自然语言处理是否明智?
  2. 论文盘点:GAN生成对抗样本的方法解析
  3. 直播预告:基于动态词表的对话生成研究 | PaperWeekly x 微软亚洲研究院
  4. pack_padded_sequence 和 pad_packed_sequence
  5. python 中的路径. ./ .. ../和相对路径的写法
  6. .net core发布 正在发现数据上下文_Tableau 2020.4 正式发布,即刻探索浏览器中的 Tableau Prep Builder、空间增强等新功能...
  7. 02 | 高性能 IO 模型:为什么单线程 Redis 能那么快?
  8. 【❤️算法系列之二叉树的实现(包含前序、中序、后序遍历以及节点的查找和删除)❤️】
  9. Cython——[FutureWarning: Cython directive ‘language_level’ not set, using 2 for now (Py2)]解决方案
  10. How far away ?