2013-03-14 67 views
0

的一部分,這是一個很學術的問題,因爲我試圖讓SQL更好的抓地力。SQL語法要求來自如SELECT語句

爲什麼將這項工作:

SELECT id FROM nerds AS nerdnumber 

但這不會?

SELECT nerds.id AS nerdnumber 

對我來說,如果我的SELECT已經標識了表,那麼不應該需要FROM。

+0

如果第一個工作,那麼別名將應用於表,而不是字段。雖然我不確定as關鍵字。 – 2013-03-14 00:59:51

回答

3

那麼什麼實際發生的幕後是發動機需要您的查詢,將其分解並確定實際指令被解僱掉,讓你的數據。

使用的語法(SELECT FROM嗒嗒......)的開發和標準化的(大部分),這就是使用什麼。 FROM需要的原因是...因爲它是:)

可能查詢解析器被更改/寫入以您建議的方式工作嗎?不明白爲什麼不這樣做,但會給解析器帶來額外的複雜性。 SELECT,FROM,UPDATE,SET和所有其他關鍵字對於讓解析器找到錨以便從中提取數據很重要。

這就像...最快最髒的原因,你當然可以去了解的SQL標準的制定和閱讀有關查詢優化和解析,讀一些真正有趣的和瘋狂的東西:)

+0

謝謝。丹尼爾的回答基本上是說同樣的事情,但我必須選擇一個接受。對不起Daniel。 threendib獲得S/O新手獎金 – tim 2013-03-14 01:07:23

3

包括SELECT子句中的表名是當你在做加盟歧義。 From子句指定語句正在訪問哪些表。

+0

所以你說整個表名稱點符號實際上只用於帶'JOIN'的語句中? – tim 2013-03-14 00:56:48

+1

點符號從來就不是一個壞主意。但我不認爲這總是值得的。 – 2013-03-14 00:58:28

+1

它不僅僅意味着連接。儘管如此,它需要消除連接中的列。 – 2013-03-14 01:01:48

0

兩個如果寫不好會工作。

如果我正確理解你的例子,然後在第一種情況下,你建立的別名爲,並在第二 - 別名爲

所以沒有什麼錯SELECT nerds.id AS nerdfield FROM nerdstable AS nerds;

2

SELECT id FROM nerds AS nerdnumberSELECT nerds.id AS nerdnumber不是等同的查詢。第一個將表中的書呆子視爲神經,第二個試圖將nerds.id別名爲nerdersnumber。但我看到你的問題。

是你問什麼可能?是。應該這樣做嗎?可能不會。使用FROM子句的原因是定義數據來自哪裏。 select子句中的字段用於確定您在定義的數據集中使用的內容。這是一種非常容易閱讀和理解的語言(因此原始的SEQL =結構化的英語查詢語言)。添加你想要的功能會突然使得很難理解查詢值來自哪裏。如果您定義了該表格會怎麼樣?如果您將該表名重新定義爲查詢中的別名,該怎麼辦?

它到底只是增加了不確定性。