内联视图和普通视图的关系以及和子查询的区别

本文探讨了内联视图与普通视图的关系,指出普通视图在执行时会转化为内联视图。同时,文章阐述了内联视图与子查询的区别,强调内联视图支持DML操作,更类似于虚拟表。内容包括内联视图和普通视图的定义、示例以及内联视图与子查询的差异,并通过实验数据加以证明。
摘要由CSDN通过智能技术生成

一、普通视图内联视图(in-line view)的关系


内联视图(in-line view):

An inline view is a SELECT statement in the FROM-clauseof another SELECT statement.

Example of inline view:

在select语句里的内联视图(in-line view),即SELECT * FROM (<select clause> ),例如

SELECT * 
  FROM ( SELECT deptno, count(*) emp_count
         FROM emp
         GROUP BY deptno ) emp,
       dept
 WHERE dept.deptno = emp.deptno;
其中,
( SELECT deptno, count(*) emp_count FROM emp GROUP BY deptno )就是所谓的内联视图(in-line view)。


在DML语句里的内联视图(in-line view),例如

insert into (<select clause> ) values (...)其具体示例如下:

insert into (select object_id,object_name,object_type from xxx where object_id<1000)
values(1001,'testbyhao','testtype');

普通视图

我们平时说的视图指的是create view语句创建的视图类型,我们暂且称其为普通视图。例如,

CREATE  VIEW     empvu30
 AS SELECT  employee_id, last_name, salary
 FROM    employees
WHERE   department_id = 30;


普通视图本质上还是内联视图(in-line view),因为在执行包含普通视图的SQL语句时,普通视图会最终转化为内联视图(in-line view)。例如,

在select语句里的普通视图,例如,

SELECT *  FROM    empvu30

最终转化为

SELECT *  FROM  SELECT  employee_id, last_name, salary  FROM    employees WHERE   department_id = 30);


在DML语句里的普通视图,例如,

insert into  empvu30 values(129,‘jak’,50000);

最终转化为

insert intoSELECT  employee_id, last_name, salary  FROM    employees WHERE   department_id = 30 values(129,‘jak’,50000);




二、内联视图(in-line view)和子查询的区别



内联视图(in-line view)各种类型的视图本质上都是内联视图)不同于子查询的地方在于

子查询(可以视之为)是一个中间结果集,但是内联视图(in-line view)不可这么认为。这点可以从

insert into (select object_id,object_name,object_typefrom xxxwhereobject_id<1000)values(999,'testbyhao','testtype');时看出,因为一个select语句执行所得的结果集是只能读取而不能被修改的,即不支持DML操作,但是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值