2009-07-17 73 views

回答

2

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

内嵌视图提供

  1. 绑定变量可以在语句中被引入到
  2. 能见度限制数据
  3. 更好地控制调整到代码
+0

绑定变量可以在语句中引入限制数据 - u能为它提供例如... – hrishi 2009-07-17 09:47:15

+0

检查此链接 http://www.akadia.com/services/ora_bind_variables.html – rahul 2009-07-17 09:56:41

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

获取排名前N的行。

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

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

0

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

Jva和Tony Andrews提供了一些很好的简单例子,例如Top-N或分页查询,在这些例子中,您可能想要执行查询并对其结果进行排序,然后将其作为更大查询的一部分反过来可能会提供一个查询来执行其他处理,这些查询的逻辑在单个查询中很难实现。

另一个可能非常有用的情况是,如果您正在编写将各种表连接在一起并希望在某些表上执行聚合的查询,那么在执行连接之前将组函数和处理分隔为不同的内联视图,使得管理基数更容易。如果你想要一些例子,我会很乐意让他们更清楚。

Factored子查询(查询开始时在WITH子句中列出查询)和内联视图也常常带来性能优势。如果您需要多次访问子查询的结果,您只需要运行一次,并且可以将其作为全局临时表实现(优化程序的行为方式并非完全黑白,因此我不会深入其中在这里,但你可以做自己的研究 - 例如,参见http://jonathanlewis.wordpress.com/2007/07/26/subquery-factoring-2/

1

Oracle Database Concepts文件存在的inline view concept definition

内嵌视图不是一个模式对象。 这是一个别名为 (相关名称)的子查询,您可以像使用SQL语句中的视图一样使用 。

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

无论如何,今天优选使用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 ...
  • 为了简化某些查询一个视图不能是有益的。例如,当视图需要从主查询过滤时。