2012-12-24 52 views
5

的是這兩個SQL語句之間的差別JOIN /在哪裏概念

一)select * from T1,T2 where T1.A=T2.A ;

B)select * from T1,T2 where T2.A=T1.A ;

我得到在這兩種情況下相同的輸出,是有這兩個之間的任何差別聲明?

C)select * from T1 inner join T2 on T1.A=T2.A ;

什麼是聲明C和A之間的diffence?在這種情況下也得到輸出的A和B一樣...

可以內部連接也可以寫成SQL語句一個?

回答

8

它們本質上都是不同的方式加入使用相同的連接條件的兩個表。

1和2之間,也絕對沒有什麼區別,只要數據庫被關注。

最後一個選項是標準化的連接語法 - 這是你應該使用,以確保您的SQL是什麼可讀的 - 這就是人們閱讀你的SQL會希望看到當你加入表。

1

SQL是像數學那樣;平等是對稱的。如果A = B,那麼B = A。有應該沒有區別。

加入/ ON符號只是另一種方式來寫同樣的事情。這個符號不同於強調視覺上的連接。

的輸出告訴你答案比任何數量的這樣用戶就更好。你爲什麼不相信自己的眼睛?

1

所有都是一樣的,沒有區別

這些diiferent方式

0

(a)和(c)是相同的,除了第二個是ANSI-92 SQL語法和所述第一是未摻入連接子句舊SQL語法。他們應該產生完全相同的內部查詢計劃,儘管您可能希望檢查。

應使用ANSI-92語法幾個原因

  • 使用該JOIN子句的分離從 濾波器邏輯(WHERE)之間的關係的邏輯,因此是清潔和更容易 理解。
  • 它不與這個特定的查詢無所謂,但也有少數 某些地方使用舊的外部聯接語法(使用+)是 含糊不清,查詢結果將因此實現依賴 - 或查詢不能得到解決所有。這些不會發生與 ANSI-92
  • 這是一個很好的做法,因爲現在大多數開發人員和dba的將使用ANSI-92 ,你應該遵循標準。當然,所有現代的 查詢工具都會生成ANSI-92。