oracle-inline视图

时间:2009-07-17 09:35:37

标签: oracle view inline

为什么使用内联视图.. ??

6 个答案:

答案 0 :(得分:4)

使用内联视图有许多不同的原因。如果没有内联视图,有些事情是无法完成的,例如:

1)过滤分析函数的结果:

select ename from
( select ename, rank() over (order by sal desc) rnk
  from emp
)
where rnk < 4;

2)在有序结果上使用ROWNUM:

select ename, ROWNUM from
( select ename
  from emp
  order by ename
);

其他时候,他们只是更容易编写您想要编写的SQL。

答案 1 :(得分:2)

内联视图是Oracle SQL中的一个构造,您可以在SQL FROM子句中放置查询,就像查询是表名一样。

内联视图提供

  1. 可以在语句中引入绑定变量来限制数据
  2. 更好地控制调整
  3. 对代码的可见性

答案 2 :(得分:1)

获得前N个有序行。

SELECT name, salary, 
FROM (SELECT name, salary
      FROM emp
      ORDER BY salary DESC)
WHERE rownum <= 10;

答案 3 :(得分:1)

内联视图可以视为以某种方式为所需数据集做出贡献的中间结果集。有时它完全是提高代码可维护性的问题,有时它在逻辑上是必要的。

答案 4 :(得分:1)

Oracle Database Concepts文档中有inline view concept definition

  

内联视图不是架构对象。   它是一个带别名的子查询   您可以使用的(相关名称)   就像SQL语句中的视图一样。

关于子查询,请查看Using Subqueries手册中的Oracle SQL Reference。它有一个非常好的教学信息。

无论如何,今天最好使用Subquery Factoring Clause这是一种更强大的内联视图使用方式。

作为所有人的一个例子:

WITH 
   dept_costs AS (
      SELECT department_name, SUM(salary) dept_total
         FROM employees e, departments d
         WHERE e.department_id = d.department_id
      GROUP BY department_name),
   avg_cost AS 
SELECT * FROM dept_costs
   WHERE dept_total >
      (SELECT avg FROM (SELECT SUM(dept_total)/COUNT(*) avg
                          FROM dept_costs)
      )
      ORDER BY department_name;  

在那里你可以看到其中一个:

  • 内联视图查询:SELECT SUM...
  • 相关子查询:SELECT avg FROM...
  • 子查询因子:dept_costs AS (...

它们用于什么?:

  • 避免创建中间视图对象:CREATE VIEW ...
  • 简化一些视图无法提供帮助的查询。例如,当视图需要从主查询中过滤时。

答案 5 :(得分:0)

您经常使用内联视图将查询分解为逻辑部分,这有助于提高可读性并使编写更复杂的查询更容易。

Jva和Tony Andrews提供了一些简单案例的好例子,这些案例很有用,例如Top-N或Pagination查询,您可能希望在将查询作为更大查询的一部分使用之前执行查询并对其结果进行排序转向可能会在执行其他处理时提供查询,其中单个查询中很难实现这些单个查询的逻辑。

它们非常有用的另一种情况是,如果您正在编写将各种表连接在一起并希望对某些表执行聚合的查询,将组函数和处理分离到不同的内联视图,然后再执行连接,则需要管理基数更容易。如果你想要一些例子,我很乐意提供它们以使其更清晰。

Factored子查询(在查询开头的WITH子句中列出查询的位置)和内联视图通常也会带来性能优势。如果你需要多次访问子查询的结果,你只需要运行一次它就可以实现为全局临时表(优化器的行为不是完全黑白的,所以我不会进入它在这里,你可以做自己的研究 - 例如,见http://jonathanlewis.wordpress.com/2007/07/26/subquery-factoring-2/