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

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

在SQL或MySQL中不使用JOIN關鍵字的聯接有問題嗎?

在SQL或MySQL中不使用JOIN關鍵字的聯接有問題嗎?

泛舟湖上清波郎朗 2019-11-15 14:41:25
當我開始編寫數據庫查詢時,我還不知道JOIN關鍵字,自然地,我只是擴展了我已經知道的內容并編寫了這樣的查詢:SELECT a.someRow, b.someRow FROM tableA AS a, tableB AS b WHERE a.ID=b.ID AND b.ID= $someVar現在,我知道這與INNER JOIN相同,我在代碼中找到了所有這些查詢,并問自己是否應該重寫它們。它們有什么臭味嗎?編輯:我的答案摘要:此查詢沒有問題,但使用關鍵字很可能會使代碼更具可讀性/可維護性。我的結論是:我不會更改舊的查詢,但將來會更正我的寫作風格并使用關鍵字。感謝您的回答!
查看完整描述

3 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

WHERE在某些常見情況下,僅使用過濾聯接可能效率極低。例如:


SELECT * FROM people p, companies c 

    WHERE p.companyID = c.id AND p.firstName = 'Daniel'

大多數數據庫將完全按字面意義執行此查詢,首先采用和表的笛卡爾積,然后按具有和字段的表進行過濾。盡管完全不受約束的產品并不存在于內存中,而是僅存在片刻,但計算確實需要一些時間。peoplecompaniescompanyIDid


更好的方法是JOIN在相關時將約束與s 組合在一起。這不僅主觀上更容易閱讀,而且效率更高。因此:


SELECT * FROM people p JOIN companies c ON p.companyID = c.id

    WHERE p.firstName = 'Daniel'

它稍長一些,但是數據庫能夠查看該ON子句并使用它直接計算完全約束JOIN,而不是從所有內容開始然后進行限制。這樣可以更快地進行計算(尤其是對于大型數據集和/或多表聯接),并且需要更少的內存。


我更改了我看到的每個使用“逗號JOIN”語法的查詢。我認為,其存在的唯一目的是簡潔??紤]到性能影響,我認為這不是一個令人信服的理由。


查看完整回答
反對 回復 2019-11-15
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

更詳細的信息INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN來自ANSI SQL / 92語法以進行連接。對我而言,這種冗長的用法使開發人員/ DBA可以更清楚地了解聯接的意圖。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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