第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

在SQL或MySQL中不使用JOIN關(guān)鍵字的聯(lián)接有問題嗎?

在SQL或MySQL中不使用JOIN關(guān)鍵字的聯(lián)接有問題嗎?

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

3 回答

?
慕仙森

TA貢獻1827條經(jīng)驗 獲得超8個贊

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


SELECT * FROM people p, companies c 

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

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


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


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

    WHERE p.firstName = 'Daniel'

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


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


查看完整回答
反對 回復(fù) 2019-11-15
?
MYYA

TA貢獻1868條經(jīng)驗 獲得超4個贊

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


查看完整回答
反對 回復(fù) 2019-11-15
  • 3 回答
  • 0 關(guān)注
  • 1630 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號