目前我正在考虑一些人为创建的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子句中的子选择仅包含表。
最佳, 将
答案 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”作为另一种特殊情况