视图相关知识的汇总

news2024/11/17 17:29:32

重点大纲

  • 描述视图
  • 创建,改变视图的定义,删除视图
  • 通过视图重新找回数据
  • 通过视图插入,更新和删除数据
  • 创建和使用inline视图
  • 执行Top-N 分析

什么是视图?

视图是基于一张表或者另一张视图的逻辑表。 视图本身不包含数据。视图被存储在数据字典中。

为什么使用视图?

  • 限制数据访问
  • 使复杂查询更容易
  • 提供数据独立性
  • 相同的数据表示为不同的视图

 

创建视图

  • 在create view 语句中可以嵌入子查询
  • 子查询可以包含复杂的SELECT语法。

授权:

SQL> 
SQL> conn / as sysdba
Connected.
SQL> 
SQL> grant create view to scott;
grant create view to scott
                     *
ERROR at line 1:
ORA-01917: user or role 'SCOTT' does not exist


SQL>  show con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=PDB1;

Session altered.

SQL> grant create view to scott;

Grant succeeded.

SQL> conn scott/tiger
ERROR:
ORA-01017: invalid username/password; logon denied


Warning: You are no longer connected to ORACLE.
SQL> conn scott/tiger@PDB1;
Connected.
SQL> 
SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
SET CONTAINER

12 rows selected.

SQL> 

创建视图

SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL> alter session set container=PDB1;

Session altered.

SQL> conn scott/tiger@PDB1;
Connected.
SQL> 
SQL> 
SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE

PRIVILEGE
----------------------------------------
SET CONTAINER

12 rows selected.

SQL> create view vu10
  2  as
  3  select empno,ename,sal,deptno from emp where deptno = 10;

View created.

SQL> set pagesize 200
SQL> set linesize 200
SQL> 

视图中增加一个字段,

SQL> select * from vu10;

     EMPNO ENAME             SAL     DEPTNO
---------- ---------- ---------- ----------
      7782 CLARK            2450         10
      7839 KING             5000         10
      7934 MILLER           1300         10

SQL> create or replace view vu10
  2  as
  3  select empno,ename,hiredate,sal,deptno from emp where deptno = 10;

View created.

SQL> select * from vu10;

     EMPNO ENAME      HIREDATE         SAL     DEPTNO
---------- ---------- --------- ---------- ----------
      7782 CLARK      09-JUN-81       2450         10
      7839 KING       17-NOV-81       5000         10
      7934 MILLER     23-JAN-82       1300         10

SQL> 

SQL> 
SQL> create or replace view vu10(employee_id,first_name,hire_date,salary,department_id)
  2  as
  3  select empno,ename,hiredate,sal,deptno from emp where deptno = 10;

View created.

SQL> select * from vu10;

EMPLOYEE_ID FIRST_NAME HIRE_DATE     SALARY DEPARTMENT_ID
----------- ---------- --------- ---------- -------------
       7782 CLARK      09-JUN-81       2450            10
       7839 KING       17-NOV-81       5000            10
       7934 MILLER     23-JAN-82       1300            10

SQL>

强制建视图

SQL> 
SQL> create or replace view vu20
  2  as
  3  select empno,ename,hiredate,sal,deptno from e05 where deptno = 20;
select empno,ename,hiredate,sal,deptno from e05 where deptno = 20
                                            *
ERROR at line 3:
ORA-00942: table or view does not exist


SQL> desc vu20
ERROR:
ORA-04043: object vu20 does not exist


SQL> create or replace force view vu20
  2  as
  3  select empno,ename,hiredate,sal,deptno from e05 where deptno = 20;

Warning: View created with compilation errors.

SQL> 
SQL> desc vu20
ERROR:
ORA-24372: invalid object for describe


SQL> create table e05 as select * from emp;

Table created.

SQL> desc vu20;
 Name                                                                                                              Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 EMPNO                                                                                                                      NUMBER(4)
 ENAME                                                                                                                      VARCHAR2(10)
 HIREDATE                                                                                                                   DATE
 SAL                                                                                                                        NUMBER(7,2)
 DEPTNO                                                                                                                     NUMBER(2)

SQL> 
SQL> select * from vu20;

     EMPNO ENAME      HIREDATE         SAL     DEPTNO
---------- ---------- --------- ---------- ----------
      7369 SMITH      17-DEC-80        800         20
      7566 JONES      02-APR-81       2975         20
      7788 SCOTT      24-JAN-87       3000         20
      7876 ADAMS      02-APR-87       1100         20
      7902 FORD       03-DEC-81       3000         20

SQL> 
SQL> select * from tab;

TNAME                                                                                                                            TABTYPE        CLUSTERID
-------------------------------------------------------------------------------------------------------------------------------- ------------- ----------
DEPT                                                                                                                             TABLE
EMP                                                                                                                              TABLE
BONUS                                                                                                                            TABLE
SALGRADE                                                                                                                         TABLE
T01                                                                                                                              TABLE
E01                                                                                                                              TABLE
E02                                                                                                                              TABLE
DETAIL_DEPT                                                                                                                      TABLE
T03                                                                                                                              TABLE
VU10                                                                                                                             VIEW
VU20                                                                                                                             VIEW
E05                                                                                                                              TABLE

12 rows selected.

SQL> select text from user_views where view_name='VU20';

TEXT
--------------------------------------------------------------------------------
select empno,ename,hiredate,sal,deptno from e05 where deptno = 20

SQL> select * from (select empno,ename,hiredate,sal,deptno from e05 where deptno = 20);

     EMPNO ENAME      HIREDATE         SAL     DEPTNO
---------- ---------- --------- ---------- ----------
      7369 SMITH      17-DEC-80        800         20
      7566 JONES      02-APR-81       2975         20
      7788 SCOTT      24-JAN-87       3000         20
      7876 ADAMS      02-APR-87       1100         20
      7902 FORD       03-DEC-81       3000         20

SQL> 

with check option:

SQL> insert into vu20 values(1,'tom',sysdate,1200,10);

1 row created.

SQL> select * from vu20;

     EMPNO ENAME      HIREDATE         SAL     DEPTNO
---------- ---------- --------- ---------- ----------
      7369 SMITH      17-DEC-80        800         20
      7566 JONES      02-APR-81       2975         20
      7788 SCOTT      24-JAN-87       3000         20
      7876 ADAMS      02-APR-87       1100         20
      7902 FORD       03-DEC-81       3000         20

SQL> select * from vu10;

EMPLOYEE_ID FIRST_NAME HIRE_DATE     SALARY DEPARTMENT_ID
----------- ---------- --------- ---------- -------------
       7782 CLARK      09-JUN-81       2450            10
       7839 KING       17-NOV-81       5000            10
       7934 MILLER     23-JAN-82       1300            10

SQL> select * from e05;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 24-JAN-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 02-APR-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
         1 tom                                              700
         1 tom                             17-NOV-22       1200                    10

16 rows selected.

SQL> roll
Rollback complete.
SQL> select * from e05;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 24-JAN-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 02-APR-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
         1 tom                                              700

15 rows selected.

SQL> create or replace force view vu20
  2  as
  3  select empno,ename,hiredate,sal,deptno from e05 where deptno = 20
  4  with check option;

View created.

SQL> insert into vu20 values(1,'tom',sysdate,1200,10);
insert into vu20 values(1,'tom',sysdate,1200,10)
            *
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation


SQL> insert into vu20 values(1,'tom',sysdate,1200,20);

1 row created.

SQL> 

对视图执行DML操作的规则

如果一个视图包含下面这些,不能通过该视图增加数据:

  • 组函数
  • GROUP BY 子句
  • DISTINCT 关键字
  • 伪列ROWNUM 关键字
  • 被表达式定义的列
  • 没有被视图选择,数据库表中的NOT NULL列。

删除视图

DROP VIEW VIEW_NAME;

SQL> drop view vu20;

View dropped.

SQL>

 内联视图

  • 内联视图是对你在SQL语句中使用的别名(或相关名称)的子查询
  • 主查询的FROM 子句中指定的子查询是内联视图的样例
  • 内联视图不是schema对象

建立一个新用户 pstest

SQL> alter session set container=PDB1;

Session altered.

SQL> grant connect,resource to pstest identified by pstest;

Grant succeeded.

SQL> conn pstest/pstest@PDB1;
Connected.
SQL> 
SQL> 

另一个用户下授予pstest 访问某个视图的权限

SQL> 
SQL> grant select on vu10 to pstest;

Grant succeeded.

SQL> 
SQL> select * from scott.vu10;

EMPLOYEE_ID FIRST_NAME HIRE_DATE     SALARY DEPARTMENT_ID
----------- ---------- --------- ---------- -------------
       7782 CLARK      09-JUN-81       2450            10
       7839 KING       17-NOV-81       5000            10
       7934 MILLER     23-JAN-82       1300            10

SQL> show user;
USER is "PSTEST"
SQL> 

创建视图

SQL> 
SQL> 
SQL> select * from (select ename,sal from emp order by sal desc);

ENAME             SAL
---------- ----------
KING             5000
FORD             3000
SCOTT            3000
JONES            2975
BLAKE            2850
CLARK            2450
ALLEN            1600
TURNER           1500
MILLER           1300
WARD             1250
MARTIN           1250
ADAMS            1100
JAMES             950
SMITH             800
tom               700

15 rows selected.

SQL> create or replace view vutest as select ename,sal from emp order by sal desc;

View created.

SQL> select * from vutest;

ENAME             SAL
---------- ----------
KING             5000
FORD             3000
SCOTT            3000
JONES            2975
BLAKE            2850
CLARK            2450
ALLEN            1600
TURNER           1500
MILLER           1300
WARD             1250
MARTIN           1250
ADAMS            1100
JAMES             950
SMITH             800
tom               700

15 rows selected.

SQL> 

Top-n 分析

  • Top-n查询查找一列中n个最大或者最小的数值
  • 最大和最小值都被认为是Top-n查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[数据结构]什么是树?什么是二叉树?

作者: 华丞臧. 专栏:【数据结构】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 文章目录一、树1.1 树的概念及结构1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用二…

JavaEE——Http请求和响应,https的加密

请求 报头 里面是一系列键值对,有的是标准定义的,有的是自定义的 典型的有以下几个 Host 代表服务器的主机地址和端口 也就是当我们访问浏览器时,可以知道从哪里获取数据 端口号如果省略就代表是默认值,http是80,h…

c++好用的网站

目录 洛谷www.luogu.com.cn 有道小图灵https://oj.youdao.com/csp 维基https://oi-wiki.org/ 1,洛谷 他的网址是www.luogu.com.cn。 这是一个好用的刷题网站,题库里有大约有2000多道题。 洛谷有题里有csp往年的题。 题库: 有题&#x…

怎么把PDF调方向保存?这几个方法值得收藏

小伙伴们在工作的时候,有时候领导会发PDF文件要你查阅重要内容,但不是每次收到的PDF文件都是无损的,有时候打开后发现里面内容杂乱并且页面方向不一致,这个时候有些小伙伴不知道怎么办,那么我们应该怎么把PDF调方向保存…

基于正交投影的实时三维人体姿态估计

王亦洲课题组 ECCV 2022 入选论文解读:基于正交投影的实时三维人体姿态估计 本文是对发表于计算机视觉领域顶级会议 ECCV 2022的论文 Faster VoxelPose: Real-time 3D Human Pose Estimation by Orthographic Projection 的解读。该论文由北京大学王亦洲课题组与微软…

Beam Failure Detection

微信同步更新欢迎关注同名modem协议笔记 正如上篇所述NR中所有的上下行信道的发送和接收都是基于波束。基站通过对信道质量的测量来动态选择UE和基站之间波束的方向和频率,进而完成通信。NR中无线链路检测可以分为两种,一种是4G中常见的radio link mon…

《Linux》day5--ssh——ssh登录与scp传文件

文章目录ssh登录基本用法配置文件密钥登录执行命令scp传文件基本用法使用scp配置其他服务器的vim和tmuxssh登录 基本用法 远程登录服务器。 ssh userhostname其中: user:是用户名hostname:是IP地址或域名 第一次登录会提示: …

城市道路积水识别监测系统

城市道路积水识别监测系统基于机器视觉分析,燧机城市道路积水识别监测系统实时识别街道路面积水情况,对严重积水时立即报警。城市道路积水识别监测系统对低洼区域进行实时监测,一旦城市道路积水识别监测系统监测到街道路面积水时,…

【附源码】Python计算机毕业设计宿舍管理系统设计

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【雨夜】一次nacos 导致的 CPU 飙高问题

今天下午突然 出现 测试环境 cpu飙高,干到了 60%,其他项目 响应时间明显变长。。。有点吓人,不想背锅 项目背景 出问题的项目是 需要连接各个不同nacos 和不同的 namespace 进行对应操作的 一个项目,对nacos的操作都是httpClien…

OSS(minio使用手册)

minio 官方文档地址:MinIO High Performance Object Storage — MinIO Object Storage for Kubernetes 1.本地客户端下载 1.1 docker 版本: docker pull minio/mc docker run minio/mc ls play docker run -it --entrypoint/bin/sh minio/mc (使用mc客户端操作其他…

2022年数维杯国际大学生数学建模挑战赛C题如何利用大脑结构特征和认知行为特征诊断阿尔茨海默病解题过程

2022年数维杯国际大学生数学建模挑战赛 C题 如何利用大脑结构特征和认知行为特征诊断阿尔茨海默病 原题再现: 阿尔茨海默病(AD)是一种起病隐匿的进行性神经退行性疾病。临床特征为全谱痴呆,包括记忆障碍、失语、流利不畅、失认、…

Qt QJsonObject初始化列表的使用问题

在VS2013Qt5.9.7上&#xff0c;QJsonObject的初始化列表构造函数有BUG QJsonObject::QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args)注&#xff1a;使用初始化列表前先要开启编译选项Q_COMPILER_INITIALIZER_LISTS 以下代码Debug异常 QJs…

SpringBoot整合tkMapper的版本问题

文章主旨&#xff1a;有问题首先看官网 昨天新建了个Spring Boot工程&#xff0c;版本为2.6.13 想要整合 tk.mapper&#xff0c;就去官网查找依赖&#xff0c;如下&#xff1a; <dependency><groupId>tk.mybatis</groupId><artifactId>mapper</a…

基于sklearn实现LDA主题模型(附实战案例)

目录 LDA主题模型 1.LDA主题模型原理 2.LDA主题模型推演过程 3.sklearn实现LDA主题模型&#xff08;实战&#xff09; 3.1数据集介绍 3.2导入数据 3.3分词处理 3.4文本向量化 3.5构建LDA模型 3.6LDA模型可视化 3.7困惑度 LDA主题模型 1.LDA主题模型原理 其实说到LDA…

web前端大一实训 HTML+CSS+JavaScript王者荣耀(60页) web课程设计网页规划与设计 HTML期末大作业 HTML网页设计结课作业

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【附源码】计算机毕业设计JAVA房产客户信息管理系统

【附源码】计算机毕业设计JAVA房产客户信息管理系统【附源码】 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#x…

新唐(nuvoton)MCU软件开发指南—环境搭建设置

新唐MCU软件开发指南—环境搭建设置 1. 下载并安装Arm Keil MDK https://www.nuvoton.com/tool-and-software/ide-and-compiler/keil-download/ 2. 申请免费版的Keil License&#xff0c;并激活 https://www.nuvoton.com/tool-and-software/ide-and-compiler/get-keil-mdk-…

Tableau安装详解及密钥申请

文章目录Tableau介绍下载软件申请密钥安装软件❤️ 作者简介&#xff1a;大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生&#xff0c;蓝桥杯国赛二等奖获得者&#x1f41f; 个人主页 &#xff1a;https://blog.csdn.net/qq_52007481⭐ 个人社区&#xff1a;【小鱼干爱…

Linux系统了解 Samba服务器配置的工作流程

了解 Samba服务器配置的工作流程 当Samba 服务安装完毕&#xff0c;并不是直接可以使用 Windows 或 Linux的客户端访问Samba服务器&#xff0c;还必须对服务器进行设置&#xff1a;告诉 Samba 服务器将哪些目录共享出来给客户端进行访问&#xff0c;并根据需要设置其他选项&…