select * from(select first_name,last_name from employees)

时间:2015-03-28 07:48:45

标签: oracle oracle11g

我理解这句话的意思,但我不明白为什么我们需要这个呢? 这等同于

select first_Name, last_name from employees

我可以在很多例子中看到这种类型的陈述。你能在我们需要的时候解释一下吗?实际上,我们使用这种类型的陈述吗?

2 个答案:

答案 0 :(得分:1)

  

您能否在需要时解释一下?

这些被称为派生表

  

A"派生表"本质上是一个语句本地临时表   通过SQL SELECT的FROM子句中的子查询创建   声明。它仅存在于内存中,其行为类似于标准视图   或者表。

在SQL中,子查询只能看到一级深度的父查询中的值。

  

实际上我们使用这种类型的语句吗?

最常见的用途是使用ROWNUM的经典行限制查询

行限制查询:

SELECT * 
FROM   (SELECT * 
        FROM   emp 
        ORDER  BY sal DESC) 
WHERE  ROWNUM <= 5; 

分页查询:

SELECT eno 
FROM  (SELECT e.empno  eno, 
              e.ROWNUM rn 
       FROM   (SELECT empno 
               FROM   emp 
               ORDER  BY sal DESC) e) 
WHERE  rn <= 5; 

答案 1 :(得分:0)

这种陈述是无用的,你是对的,但是在很多情况下你需要一个子选择因为你不能在一个陈述中做所有事情。在我的头脑中,我正在思考,例如,结合聚合函数,获得总和的最小值,最大值和平均值

select min(t.summed), max(t.summed), avg(t.summed) 
from (select type, sum(value) as summed from table1 group by type) t 

这只是我的头脑,但我确实遇到了很多场合,其中必须使用from子句中的subselects。一旦陈述足够复杂,你就会看到它。