的一部分,這是一個很學術的問題,因爲我試圖讓SQL更好的抓地力。SQL語法要求來自如SELECT語句
爲什麼將這項工作:
SELECT id FROM nerds AS nerdnumber
但這不會?
SELECT nerds.id AS nerdnumber
對我來說,如果我的SELECT已經標識了表,那麼不應該需要FROM。
的一部分,這是一個很學術的問題,因爲我試圖讓SQL更好的抓地力。SQL語法要求來自如SELECT語句
爲什麼將這項工作:
SELECT id FROM nerds AS nerdnumber
但這不會?
SELECT nerds.id AS nerdnumber
對我來說,如果我的SELECT已經標識了表,那麼不應該需要FROM。
那麼什麼實際發生的幕後是發動機需要您的查詢,將其分解並確定實際指令被解僱掉,讓你的數據。
使用的語法(SELECT FROM嗒嗒......)的開發和標準化的(大部分),這就是使用什麼。 FROM需要的原因是...因爲它是:)
可能查詢解析器被更改/寫入以您建議的方式工作嗎?不明白爲什麼不這樣做,但會給解析器帶來額外的複雜性。 SELECT,FROM,UPDATE,SET和所有其他關鍵字對於讓解析器找到錨以便從中提取數據很重要。
這就像...最快最髒的原因,你當然可以去了解的SQL標準的制定和閱讀有關查詢優化和解析,讀一些真正有趣的和瘋狂的東西:)
謝謝。丹尼爾的回答基本上是說同樣的事情,但我必須選擇一個接受。對不起Daniel。 threendib獲得S/O新手獎金 – tim 2013-03-14 01:07:23
包括SELECT子句中的表名是當你在做加盟歧義。 From子句指定語句正在訪問哪些表。
所以你說整個表名稱點符號實際上只用於帶'JOIN'的語句中? – tim 2013-03-14 00:56:48
點符號從來就不是一個壞主意。但我不認爲這總是值得的。 – 2013-03-14 00:58:28
它不僅僅意味着連接。儘管如此,它需要消除連接中的列。 – 2013-03-14 01:01:48
兩個如果寫不好會工作。
如果我正確理解你的例子,然後在第一種情況下,你建立的別名爲表,並在第二 - 別名爲場。
所以沒有什麼錯SELECT nerds.id AS nerdfield FROM nerdstable AS nerds;
SELECT id FROM nerds AS nerdnumber
和SELECT nerds.id AS nerdnumber
不是等同的查詢。第一個將表中的書呆子視爲神經,第二個試圖將nerds.id別名爲nerdersnumber。但我看到你的問題。
是你問什麼可能?是。應該這樣做嗎?可能不會。使用FROM子句的原因是定義數據來自哪裏。 select子句中的字段用於確定您在定義的數據集中使用的內容。這是一種非常容易閱讀和理解的語言(因此原始的SEQL =結構化的英語查詢語言)。添加你想要的功能會突然使得很難理解查詢值來自哪裏。如果您定義了該表格會怎麼樣?如果您將該表名重新定義爲查詢中的別名,該怎麼辦?
它到底只是增加了不確定性。
如果第一個工作,那麼別名將應用於表,而不是字段。雖然我不確定as關鍵字。 – 2013-03-14 00:59:51