内联视图与oracle中的内联表有何不同?

时间:2013-01-27 13:27:54

标签: oracle

有人能说出 内联视图 内联表 之间的区别吗?

使用 SQL 代码进行解释可能很容易理解这个概念。

2 个答案:

答案 0 :(得分:3)

  

“在接受采访时我已经问过这个问题了。”

我们听到了很多。这类问题的问题在于你问的是错误的人:你应该有勇气向面试官说:“对不起,我不熟悉”内联表“一词,请你解释一下它?”

相反,你问我们,事实是,我们不知道面试的内容是什么。我同意Alex的观点,“内联表”最接近的是t he TABLE() function for querying nested table collections,但它不是标准术语。

我多次站在面试台的对面。我总是赞扬一位要求我澄清问题的候选人;我总是记下一个喋喋不休的候选人。

答案 1 :(得分:0)

世界正在努力优化数据库查询,我也是如此。如果我说我有一些可以将应用程序加速到80%的因素,如果在正确的情况下使用,你会说什么... 在这里,我给你一个问题,假设你想要计算整个部门的最低薪水和最高薪水,并给出各自经理的员工姓名。 一种方法是创建一个临时表,其中包含员工的汇总工资。

create table tmp_emp_sal as select t.emp_id,max(t.sal) as maxsal,min(t.sal) as minsal,avg(t.sal) as avgsal from sal t group by t.emp_id

然后在查询中进一步使用它。

select concat(e.last_nm, e.first_nm) as employee_name,concat(m.last_nm,m.first_nm) as manager_name,tt.maxsal,tt.minsal,tt.avgsal from emp e,emp m,dept d,tmp_test tt where e.dept_id = d.dept_id and s.emp_id = tt.emp_id and e.mgr_id = m.emp_id   order by employee_name, manager_name

现在,我将通过将两个DML和DDL操作合并到一个DML查询中来优化上述代码。

选择concat(e.last_nm,e.first_nm)作为employee_name,concat(m.last_nm,m.first_nm)作为manager_name,tt.maxsal,tt.minsal,tt.avgsal来自emp e,emp m,dept d ,(选择t.emp_id,max(t.sal)为maxsal,min(t.sal)为minsal,avg(t.sal)为来自sal t group的avgsal by emp_id)tt,其中e.dept_id = d.dept_id和s.emp_id = tt.emp_id和e.mgr_id = m.emp_id order by employee_name,manager_name

以上查询使用户免于以下缺点: - 消除昂贵的DDL语句。 消除了到数据库服务器的往返。 内存使用率要轻得多,因为它只存储最终结果而不是中间步骤。 因此,最好使用内联视图代替临时表。