亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQLJOIN:使用、打開或在何處有區別嗎?

SQLJOIN:使用、打開或在何處有區別嗎?

幕布斯6054654 2019-06-15 10:44:18
SQLJOIN:使用、打開或在何處有區別嗎?我想知道SQL對這些JOIN語句的執行方式是否有任何不同:SELECT * FROM a,b WHERE a.ID = b.IDSELECT * FROM a JOIN b ON a.ID = b.IDSELECT * FROM a JOIN b USING(ID)有表演上的差別嗎?還是算法上的差異?還是只是語法糖?
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

在表現上沒有差別。

然而,第一種款式是ANSI-89,在一些商店會讓你的腿斷。包括我的。第二種風格是ANSI-92,而且更加清晰。

例子:

哪一個是連接,哪個是過濾器?

FROM T1,T2,T3....WHERE T1.ID = T2.ID AND
     T1.foo = 'bar' AND T2.fish = 42 AND
     T1.ID = T3.IDFROM T1 
   INNER JOIN T2 ON T1.ID = T2.ID   INNER JOIN T3 ON T1.ID = T3.IDWHERE
   T1.foo = 'bar' AND T2.fish = 42

如果你有外部連接(=**=)那么第二種款式就會像廣告中所說的那樣起作用。在SQLServer 2005+中,最有可能不推薦的也是不推薦的

ANSI-92風格也很難使用。如果你錯過了一個條件,用舊的風格,你很容易得到笛卡兒的產品(交叉連接)。ANSI-92會出現語法錯誤。

編輯:更多的澄清

  • 不使用“JointheWHERE”(隱式)的原因是外部聯接的錯誤結果。
  • 如果您使用顯式外部聯接+隱式內部連接,則仍然會得到不可靠的結果+您的用法不一致

不僅僅是句法:這是關于擁有一個語義正確查詢

SQLServer邏輯查詢處理順序是從,開始,加入,在那里.

因此,如果將“內連接的隱式”和“外連接的顯式”混合使用,則很可能不會得到預期的結果,因為查詢是不明確的.


查看完整回答
反對 回復 2019-06-15
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

我鄙視你通過使用WHERE..只是在我看來不對,一個骯臟的黑客。正確的ANSI連接用于:

SELECT 
    p.Product,
    o.OrderFROM 
    Product pINNER JOIN
    Order oON
    o.OrderID = p.OrderID

更喜歡使用ON加入的時候WHERE過濾結果。記住,除了按要過濾結果的位置進行分組和排序之外,您將使用的最后一件東西是在哪里。因此,您不應該使用WHERE因為它很難讀懂。

SELECT 
    p.Product,
    o.OrderFROM 
    Product pINNER JOIN
    Order oON
    o.OrderID = p.OrderIDWHERE
    o.Category = 'IT'

最后,您(開發人員)可能不會在未來出現,因此可讀性和可維護性將幫助必須接管代碼的傾注靈魂:)。

當我看到開發人員使用WHERE要加入他們的表,這通常表明他們不了解足夠的T-SQL。這是我個人的看法。


查看完整回答
反對 回復 2019-06-15
  • 3 回答
  • 0 關注
  • 500 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號