Oracle SQL语法:列基础

时间:2011-05-12 19:04:49

标签: sql oracle

目前我正在考虑一些人为创建的SQL语句,并希望知道语句中每个属性的基表。但是,有些语句我们无法在没有表定义的情况下确定基表。我将在Oracle SQL语句中应用我的想法,我想知道我编写的所有语句是否真的是有效的Oracle SQL?

1)

select a from table

属性a属于表,因为没有其他基表

2)

select a from table t

属性a属于表,因为没有其他基表

3)

select t.a from table t

属性a属于表,根据前缀。

4)

select a from table1, table2

属性a属于table1或table2,我们不能没有表定义

5)

select a from table1 t1, table2

属性a属于table1或table2,我们不能没有表定义

6)

select a from (select * from table t) s

属性a属于表,因为from子句中的子选择仅包含表。

最佳, 将

2 个答案:

答案 0 :(得分:2)

所有都应该有效,但如果table1和table2都包含一个名为a的列,则4和5可能无效,因为这将是不明确的。

答案 1 :(得分:2)

不太完整

select a from table

“A”可以是用户定义的函数,而不是表列(或函数的同义词)。还有几个内置的伪列(例如ROWNUM,LEVEL)以及SYSDATE之类的东西。

此外,如果语句是PL / SQL,那么“A”也可以是PL / SQL程序单元的本地变量。

select t.a from table t

有一些奇怪的优先规则值得reading。 “T.A”可以引用具有函数“A”的pl / sql包“T”,或者它可以引用具有函数“A”的模式“T”。

另请注意“sequence_name.nextval”作为另一种特殊情况