2011-05-12 68 views
1

當前我正在考慮一些人工創建的SQL語句,並且想知道語句中每個屬性的基表。然而,如果沒有表定義,我們無法確定基表。因爲我會將自己的想法應用於Oracle SQL語句,所以我想知道是否所有構成的語句實際上都是有效的Oracle SQL?Oracle SQL語法:列基址

1)

select a from table 

屬性一個屬於表,因爲沒有其他基表

2)

select a from table t 

屬性一個屬於表,因爲沒有其它基表

3)

select t.a from table t 

屬性a屬於表,根據前綴。

4)

select a from table1, table2 

屬性一個要麼屬於TABLE1或表2中,我們不能沒有表定義說

5)

select a from table1 t1, table2 

屬性一個要麼屬於TABLE1或表2,我們不能說沒有表定義

6)

select a from (select * from table t) s 

屬性a屬於表,因爲from子句中的子查詢只包含表。

最佳, 威爾

+2

爲了SQL新手的好處:這就是爲什麼你總是應該*爲你的字段添加表名或別名的前綴,除非查詢中只有一個表。 – 2011-05-12 19:15:27

回答

2

所有的應該是有效的,但4和5可能是無效的,如果兩個Table 1和Table包含一個名爲因爲這將是不明確的列。

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「作爲另一種特殊情況