2012-04-05 69 views
2

第二個查詢是第一個查詢的簡寫形式嗎?第二個是做一個隱式JOIN?他們都返回相同的結果...所以我想知道哪一個更好用。使用SQL Server 2008.感謝您的回答。這兩個SQL查詢有什麼區別

首先查詢

SELECT b.columnOne, a.columnTwo 
FROM tableA As a JOIN tableB As b ON a.id = b.id 

第二個查詢

SELECT b.columnOne, a.columnTwo 
FROM tableA As a, tableB as b 
WHERE a.id = b.id 

回答

4

它們是相同的。第二個是而不是使用ANSI標準連接,而第一個是。

很多(儘管不是全部)開發人員更喜歡第一個版本(ANSI標準),因爲它將邏輯保留在一個地方。它允許過濾器邏輯保留在WHERE子句中。

1

首先查詢是正確的。
第二個查詢的執行計劃被「翻譯」爲第一個,因爲引擎知道您正在加入表格,所以在這種情況下是相同的。
無論如何,當您使用涉及多個相關表的查詢時,您應該始終使用JOIN語法(因爲它是爲此而生)並且避免WHERE:對於後者,如果引擎不能轉換爲JOIN語法,您可以創建巨大的查詢,因爲你乘以每個表內的記錄數(它被稱爲笛卡爾積)。

+1

它仍然有效JOIN語法,馬可。它只是一個過濾笛卡爾產品。 – JNK 2012-04-05 13:05:32

+0

@JNK:是的,我知道,但請閱讀我答案的最後部分。我試圖告訴OP他應該使用JOIN加入表中的某個地方進行篩選;) – Marco 2012-04-05 13:07:44

+0

是的,我明白了,Marco。只是想澄清沒有「翻譯」需要,因爲這是一個有效的(如果不太清楚和較少使用)'JOIN'語法。 – JNK 2012-04-05 13:08:29

0

單獨指定連接(第一種形式)在我看來更清潔。然後您可以在WHERE子句中添加您的搜索條件。但是,這兩種形式是相同的。

0

無論是查詢將返回相同的結果,

看看在MS SQL的文章連接 - http://www.codeproject.com/Articles/102805/SQL-Joins

首先查詢是正確的,我們可以用加入的條件申請更多的過濾器 - 左外連接, 右外連接, 全外連接 等