一、视图

1.定义:

  视图是一种虚表,是从表中抽出的逻辑上相关的数据集合。

  视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

  向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句。

  视图向用户提供基表数据的另一种表现形式。

2.作用:

  控制数据访问

  简化查询

  避免重复访问相同的数据

  对视图的数据进行修改,基表的数据也会产生相应的修改。

3.简单视图和复杂视图的区别:

     简单  复杂

表的数量:一个  一个或多个

函数:  没有  有

分组:  没有  有

DML操作:可以  有时可以

4.视图的创建

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];

特点:

  create or replace:加上or replace的create语句可以覆盖相同名字的视图,达到修改视图的目的。

  with read only:将视图改为只读视图,屏蔽对视图的DML操作,无法修改视图。

实例:

  使用employees表创建只读视图employees_v,其中包括姓名(name),员工编号(id),部门号(dept_id),数据限定在80号部门的范围内。

create or replace view employee_v
as
select last_name name,employee_id id,department_id dept_id
from employees
where department_id = 80
with read only;

5.复杂视图

特点:使用分组函数。

实例:

create view dept_salary_v
as
select department_name name,avg(salary) avg_sal
from employees e,departments d
where e.department_id = d.department_id
group by department_name;

6.视图中使用DML的规定

可以在简单视图中执行 DML 操作。

当视图定义中包含以下元素之一时不能使用delete:组函数、GROUP BY 子句、DISTINCT 关键字、ROWNUM 伪列

当视图定义中包含以下元素之一时不能使用update:组函数、GROUP BY子句、DISTINCT 关键字、ROWNUM 伪列、列的定义为表达式

当视图定义中包含以下元素之一时不能使用insert:组函数、GROUP BY子句、 ROWNUM 伪列、表中非空的列在视图定义中未包括

7.Top-N分析、

定义:

Top-N 分析查询一个列中最大或最小的 n 个值:
例如:销售量最高的十种产品是什么?
   销售量最差的十种产品是什么?

格式:

SELECT [column_list], ROWNUM 
FROM (SELECT [column_list] 
    FROM table
    ORDER BY Top-N_column)
WHERE ROWNUM <= N;

错误的格式:

SELECT [column_list], ROWNUM

FROM table

WHERE ROWNUM <= N

ORDER BY Top-N_column;

错误原因:这种查询会先执行ROWNUM <= N,截取原始的前N条数据,而不是排序后的前N条数据。

注意:

ROWNUM是一个伪列,按行数据的先后顺序从1开始递增。

对 ROWNUM 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据。可以通过对伪列rownum起别名来使其成为真实的列,再通过select该列就可以使用 =, >, >=。

实例:

按员工工资降序排列员工表的视图,包括员工编号,工资,姓名,要求只显示第40到第50条数据。

select *
from(
select rownum rn,employee_id,salary
from(
select employee_id,salary,last_name
from employees
order by salary desc
)
)where rn <=50 and rn >40

二、控制用户权限

1.创建用户

CREATE USER user 
IDENTIFIED BY password;

用户创建之后, DBA 会赋予用户一些系统权限
GRANT privilege [, privilege...]
TO user [, user| role, PUBLIC...];
以应用程序开发者为例, 一般具有下列系统权限:
CREATE SESSION(创建会话)
CREATE TABLE(创建表)
CREATE SEQUENCE(创建序列)
CREATE VIEW(创建视图)
CREATE PROCEDURE(创建过程)

实例:

GRANT  create session, create table,
create sequence, create view
TO scott;

创建用户表空间:

用户拥有create table权限之外,还需要分配相应的表空间才可开辟存储空间用于创建的表

ALTER USER scott QUOTA UNLIMITED
ON users

修改密码:

DBA 可以创建用户和修改密码
用户本人可以使用 ALTER USER 语句修改密码

ALTER USER scott
IDENTIFIED BY lion;

2.角色:给创建的角色分配一个或多个权限,再把角色分配给用户。

创建角色:

create role manager;

为角色赋予权限:

grant create table, create view
to manager;

将角色赋予用户:

grant manager to scott;

3.对象权限

不同的对象具有不同的对象权限
对象的拥有者拥有所有权限
对象的拥有者可以向外分配权限

分配对象权限:

GRANT    object_priv [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];

with grant option:使用户同样具有分配权限的权利

public:向数据库中所有用户分配权限

收回对象权限:

使用 REVOKE 语句收回权限
使用 WITH GRANT OPTION 子句所分配的权限同样被收回

REVOKE {privilege [, privilege...]|ALL}
ON object
FROM {user[, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS];

三、set操作符

将多个查询用 SET 操作符连接组成一个新的查询

1.UNION操作符

  UNION 操作符返回两个查询的结果集的并集

2.UNION ALL操作符

  UNION ALL 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。

3.INTERSECT操作符

  INTERSECT 操作符返回两个结果集的交集

4.MINUS操作符

  MINUS操作符:返回两个结果集的差集

5.注意事项:  

在SELECT 列表中的列名和表达式在数量和数据类型上要相对应

括号可以改变执行的顺序

ORDER BY 子句:只能在语句的最后出现;可以使用第一个查询中的列名, 别名或相对位置

除 UNION ALL之外,系统会自动将重复的记录删除

系统将第一个查询的列名显示在输出中

除 UNION ALL之外,系统自动按照第一个查询中的第一个列的升序排列

6.实例

各个select语句的列的数量和数据类型要匹配:

SELECT department_id, TO_NUMBER(null) location, hire_date
FROM employees
UNION
SELECT department_id, location_id, TO_DATE(null)
FROM departments;

使用相对位置排序:

COLUMN a_dummy NOPRINT
SELECT 'sing' AS "My dream", 3 a_dummy
FROM dual
UNION
SELECT 'I`d like to teach', 1
FROM dual
UNION
SELECT 'the world to', 2
FROM dual
ORDER BY 2;

注:第一行语句使a_dummy这个列不打印出来。

  最后一行语句使表按第二列排序

Oracle学习DayThree的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. Oracle学习线路

    出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)    作为oracle的基本功,需要大家对sql和 ...

  3. Oracle学习指南

    Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...

  4. Oracle学习系列1-7

    Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...

  5. Oracle学习系列7

    Oracle学习系列7 ************************************************************************************ 关联表 ...

  6. Oracle学习系列6

    Oracle学习系列6 ************************************************************************************ 删除约 ...

  7. Oracle学习系列5

    Oracle学习系列5 ************************************************************************************ ,掌握 ...

  8. Oracle学习系列4

    Oracle学习系列4 ************************************************************************************ 数据库 ...

  9. Oracle学习系列3

    Oracle学习系列3 ************************************************************************************ 多表查 ...

随机推荐

  1. Linux之DHCP搭建命令集锦

    systemctl start dhcpd        //启动DHCP systemctl enable dhcpd                //配置服务开机启动 ps aux | grep ...

  2. Mysql 索引之B+tree

    InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶 ...

  3. APP测试常见点

    1. 生成APK文件在真机上可以安装和卸载(安装卸载测试) 2. 第三方手机助手上面可以安装和卸载(安装卸载测试) 3. 启动APP 4. 验证数字签名.升级后可以正常使用.在线跨版本升级(在线升级测 ...

  4. PAT 1136 A Delayed Palindrome

    1136 A Delayed Palindrome (20 分)   Consider a positive integer N written in standard notation with k ...

  5. prefixspan是挖掘频繁子序列,子序列不一定是连续的,当心!!!

    序列模式挖掘是从序列数据库中发现频繁子序列作为模式. 子序列与频繁序列 了解了序列数据的概念,我们再来看看上面是子序列.子序列和我们数学上的子集的概念很类似,也就是说,如果某个序列A所有的项集在序列B ...

  6. 安全基线自动化扫描、生成报告、加固的实现(以Tomcat为例)

    一.背景说明 当前在服务上线前,安全部门都会对服务基线配置进行把关,整个流程可以分为扫描.生成报告.修复三步. 在执行这一流程时当前普遍的做法是半自动化的,扫描和生成报告是自动化的,执行扫描.执行生成 ...

  7. 学号20175212 《Java程序设计》第7周学习总结

    学号20175212 <Java程序设计>第7周学习总结 教材学习内容总结 8.1.String类 可以使用String类声明对象并创建对象,例如: String s = new Stri ...

  8. WPF实现分页控件

    页面代码如下: <UserControl x:Class="Music163.DataGridPaging" xmlns="http://schemas.micro ...

  9. onceAgain, 这是一个py群的群公告说明

    群规: 1. 不骚扰人 2. 不涉及娱乐政治 3. 主要就这两条 入门参考:https://book.douban.com/review/9547077/ qq群/网盘:523445644  # 加群 ...

  10. ssh自动登入

    公司的服务器在国外,所以测试的查看日志的时候需要测试机,然后继续ssh 非常不方便,所以编写一个简单的ssh登入脚本 #!/usr/bin/expectset timeout 3spawn ssh n ...