谁能说出内联视图和内联表之间的区别?
使用SQL代码进行解释可能有助于轻松理解该概念。
“这个问题在一次采访中被问到过。”
我们经常听到这个。这类问题的问题在于你问错了人:你应该有勇气对面试官说:“对不起,我不熟悉‘内联表’这个词,你能解释一下吗?它?”
相反,你问我们,问题是,我们不知道面试的目的是什么。我同意亚历克斯的观点,最接近“内联表”的是TABLE() 用于查询嵌套表集合的函数,但这不是一个标准术语。
我多次站在面试桌的对面。我总是赞扬要求我澄清问题的候选人;我总是给一个大喊大叫的候选人打分。
世界都在努力优化数据库查询,我也是。好吧,如果我说我有一些东西可以将应用程序的速度提高到 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 查询中来优化上述代码。
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,(select t.emp_id, max(t.sal) as maxsal, min(t.sal) as minsal, avg(t.sal) as avgsal from salt t group by emp_id) tt where e.dept_id = d.dept_id and s.emp_id = tt.emp_id 和 e.mgr_id = m.emp_id 按employee_name,manager_name 排序
上述查询使用户免于以下缺点:- 消除昂贵的 DDL 语句。消除了到数据库服务器的往返行程。内存使用量要轻得多,因为它只存储最终结果而不是中间步骤。因此,最好使用内联视图代替临时表。