sqlplus之 内联视图
扫描二维码
随时随地手机看文章
内联视图
在select语句里的内联视图(in-line view),即 SELECT * FROM (
scott@ORCL>select * from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON
scott@ORCL>select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7902 FORD ANALYST 7566 03-12月-81 3000 20 7934 MILLER CLERK 7782 23-1月 -82 1300 10 已选择14行。
scott@ORCL>select * from 2 (select deptno,count(*) emp_count from emp group by deptno) emp,dept 3 where dept.deptno=emp.deptno; DEPTNO EMP_COUNT DEPTNO DNAME LOC ---------- ---------- ---------- -------------- ------------- 10 3 10 ACCOUNTING NEW YORK 20 5 20 RESEARCH DALLAS 30 6 30 SALES CHICAGO
其中,( select deptno,count(*) emp_count from emp group by deptno )
就是内联视图(in-line view)
在DML语句里的内联视图(in-line view),insert into (
insert into (select object_id,object_name,object_type from xxx where object_id<1000) values(1001,'testbyhao','testtype');
普通视图
scott@ORCL>create view emp7934 2 as 3 select empno,ename,sal from emp where empno=7934; 视图已创建。
普通视图本质上还是内联视图(in-line view),因为在执行包含普通视图的SQL语句时,普通视图都会最终转化为内联视图(in-line view)
在select语句里的普通视图,例如:
scott@ORCL>select * from emp7934; EMPNO ENAME SAL ---------- ---------- ---------- 7934 MILLER 1300
最终转化为:
scott@ORCL>select * from (select empno,ename,sal from emp where empno=7934); EMPNO ENAME SAL ---------- ---------- ---------- 7934 MILLER 1300
在DML语句里的普通视图,例如:
scott@ORCL>insert into emp7934 values(111,'Test',3500); 已创建 1 行。
最终转化为:
scott@ORCL>insert into ( select empno,ename,sal from emp where empno=7934) values(222,'Test2',4000); 已创建 1 行。