Oracle基础表的选择,oracle – 为什么我必须从双表中选择?

严格地说,是的,SELECT语句的FROM子句不是可选的.

The syntax for SQL-99详细介绍了基本的SELECT语句,而FROM子句周围没有任何方括号.这表明标准认为它是非可选的:

SELECT [ DISTINCT | ALL ]

{Column expression [ AS name ]} [,... ] | *

FROM

[ WHERE search condition ]

[ GROUP BY Columns [ HAVING condition ] ]

[ORDER BY {col_name | expr | position} [ASC | DESC],...]

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

[PROCEDURE procedure_name(argument_list)]

[INTO OUTFILE 'file_name' export_options |

INTO DUMPFILE 'file_name' |

INTO var_name [,var_name]]

[FOR UPDATE | LOCK IN SHARE MODE]

在实际使用中,程序员和DBA经常发现除了操作表中的数据或操作表和数据结构之外,还可以执行其他操作.这种类型的东西在很大程度上超出了sql标准的范围,sql标准关注的是数据特性而不是特定实现的细节.无论我们是想运行SELECT getdate()还是SELECT 1或SELECT DB_NAME()(或者您的方言更喜欢),我们实际上并不想要表中的数据.

Oracle选择使用具有以下有效定义的虚拟表来解决标准和实现差异:

CREATE TABLE DUAL (

DUMMY CHAR(1)

)

INSERT INTO DUAL (DUMMY) VALUES ('X')

其他RDBMS实质上假设如果没有指定FROM,则使用伪表.

The DUAL table was created by Charles Weiss of Oracle corporation to

provide a table for joining in internal views:

I created the DUAL table as an underlying object in the Oracle Data

Dictionary. It was never meant to be seen itself,but instead used

inside a view that was expected to be queried. The idea was that you

could do a JOIN to the DUAL table and create two rows in the result

for every one row in your table. Then,by using GROUP BY,the

resulting join could be summarized to show the amount of storage for

the DATA extent and for the INDEX extent(s). The name,DUAL,seemed

apt for the process of creating a pair of rows from just one.

原始的DUAL表中有两行(因此它的名字),但是随后它只有一排.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值