oracle – 为什么我必须从双表中选择?
这适用于最有可能出现在StackOverflow / dba.stackexchange上的主要关系数据库管理系统,即SQL Server,MySQL,PostgreSQL和SQLite(WebSQL).
select 'abc' abc,1 def; 它不适用于Oracle.为什么我们需要从Oracle中选择DUAL? SQL的ISO / ANSI标准是否需要SELECT语句的FROM子句? 编辑: Per Bacon Bit的答案,似乎是SQL标准所要求的. 所以实际上,因为名称DUAL是如此用词不当,如果我要创建一个表并将其命名为ATOM或ONE,例如create table one(atom int); ..选择’abc’abc,1 def FROM one; – 与SELECT … FROM DUAL相比,是否存在性能损失? 严格地说,是的,SELECT语句的FROM子句不是可选的. The syntax for SQL-99详细介绍了基本的SELECT语句,而FROM子句周围没有任何方括号.这表明标准认为它是非可选的:SELECT [ DISTINCT | ALL ] {Column expression [ AS name ]} [,... ] | * FROM <Table reference> [ {,<Table reference>} ... ] [ 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,则使用伪表. history of the DUAL table在维基百科上:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |