代码之家  ›  专栏  ›  技术社区  ›  RRUZ

在Oracle中选择而不使用FROM子句

  •  40
  • RRUZ  · 技术社区  · 16 年前

    SQL Server

    Select 1.2 +3, 'my dummy string'
    

    作为

    Select 1,2+3, 'my dummy string' FROM DUAL
    

    有更好的方法来执行这种类型的查询吗?使用双表是一种很好的做法?

    6 回复  |  直到 12 年前
        1
  •  84
  •   Quassnoi    16 年前

    不,在 Oracle SELECT 没有 FROM

    dual 餐桌是一种很好的习惯。

    二重的 是内存中的表。如果您不选择 DUMMY 从中,它使用一个特殊的访问路径( FAST DUAL I/O .

    二重的 有两条记录(因此得名),并打算用作虚拟记录集,以复制与之连接的记录。

    现在它只有一条记录,但您仍然可以使用它生成任意数量的行:

    SELECT  level
    FROM    dual
    CONNECT BY
            level <= 100
    

    MySQL 也支持 二重的

        2
  •  8
  •   Jeffrey Kemp    16 年前

    不要忘记,大多数情况下,您实际上不需要使用SELECT。

    而不是:

    SELECT sysdate INTO l_date FROM dual;
    SELECT CASE WHEN i = j THEN 0 ELSE 1 END INTO l_foo FROM dual;
    ...
    

    l_date := sysdate;
    l_foo  := CASE WHEN i = j THEN 0 ELSE 1 END;
    ...
    
        3
  •  4
  •   dcp    16 年前

    这是一个很好的实践,使用双 桌子

    是的,双表通常用于此目的。在Oracle中,当您没有表可供选择时,这是相当标准的。

        4
  •  3
  •   WhatsThePoint    7 年前

    DUAL的主要优点是Oracle中的优化器知道它是特殊的,因此使用它的查询可以比使用自己制作的单行表更快。除此之外,没有什么特别的。

        5
  •  2
  •   tmeisenh    16 年前

        6
  •  2
  •   DCookie    16 年前

    实际上,SQLServer的实现是非标准的。这个 SQL-92 Standard (第7.9节)要求在SELECT语句中使用FROM子句。DUAL是Oracle提供表以从中选择以获取标量行的方式。