电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL中的 inner join 和 left join的區(qū)別解析(小結(jié)果集驅(qū)動(dòng)大結(jié)果集)

瀏覽:230日期:2023-05-08 10:17:46
目錄
  • 場(chǎng)景描述
  • inner join 和 left join 的區(qū)別

場(chǎng)景描述

以一個(gè)場(chǎng)景為例:

單據(jù)A:下游子表 (數(shù)據(jù)量級(jí)小)
單據(jù)B:下游主表(數(shù)據(jù)量級(jí)小)
單據(jù)C:中游子表(數(shù)據(jù)量級(jí)小)
單據(jù)D:中游主表(數(shù)據(jù)量級(jí)小)
單據(jù)E:上游子表(數(shù)據(jù)量級(jí)小)
單據(jù)F:上游主表(比其他表數(shù)據(jù)量級(jí)大)

需求:將單據(jù)F的某個(gè)字段,刷到單據(jù)A的某個(gè)字段上面。從A到F,都可以通過(guò)id連接索引的形式,來(lái)關(guān)聯(lián)。但是A到F的連接順序必須是從A到F順序連接。比如:

這幾個(gè)表的連接可以用下面的例子演示:

a join b on a.id = b.idb join c on b.id = c.mainIdc join d on c.id = d.tableIdd join e on d.id = e.tide join f on e.tid = f.code

inner join 和 left join 的區(qū)別

我們寫(xiě)update語(yǔ)句的時(shí)候,肯定是想要用join連表的。但是到底是使用inner join;還是left join比較好呢?

  • left join:

select a.*,b.* from a left join b on a.id = b.id , 這兩個(gè)表連接,根據(jù)后面的on條件,如果b表里面的b.id不符合 a.id = b.id ,那么a表里面的所有數(shù)據(jù)列都會(huì)給展示出來(lái)。然后b表沒(méi)有這種數(shù)據(jù),所以sql里面的 b.* 會(huì)被全部填充成null

  • inner join:

select a.*,b.* from a inner join b on a.id = b.id , 這兩個(gè)表連接,根據(jù)后面on條件,如果b表里面的b.id不符合 a.id = b.id ,那么a表里面的部分?jǐn)?shù)據(jù)列(不符合a.id = b.id條件的)就不會(huì)展示。

根據(jù)上面的定義,left join常用于select 語(yǔ)句;這是為了防止a表會(huì)少一些匹配記錄,為了能展示全a表,所以使用left join。

如下圖所示:

索引角度理解小結(jié)果集驅(qū)動(dòng)大結(jié)果集

不管是 left join 和 inner join,都要注意小結(jié)果集驅(qū)動(dòng)大結(jié)果集。a表 join b表的時(shí)候,

還是看之前例子的SQL:

select a.*,b.* from a left join b on a.id = b.id

假設(shè)a表數(shù)量級(jí)是100萬(wàn)條,b表數(shù)量級(jí)是100條。我這樣連接,就是大表驅(qū)動(dòng)小表;直接看查找次數(shù):

在用后面on條件連接兩個(gè)表的時(shí)候,首先要走B+樹(shù)索引進(jìn)行匹配;拿a表這100w的數(shù)量級(jí),逐條對(duì)比 -> B+樹(shù) -> 匹配到 b表的記錄。假設(shè)B+樹(shù)查找b表的100條要用2次查找,那么最終查找次數(shù)就是: 100萬(wàn) * 2 次

如果是小表驅(qū)動(dòng)大表:

select a.*,b.* from b left join a on a.id = b.id

那么就會(huì)拿b表這100條,逐條對(duì)比 -> B+樹(shù) -> 匹配到 a表的記錄。假設(shè)B+樹(shù)查找a表的100w條要用3次查找,那么最終查找次數(shù)就是: 100 * 3 次

從索引匹配的角度講,小結(jié)果集驅(qū)動(dòng)大結(jié)果集的效率優(yōu)化了不是一點(diǎn)半點(diǎn)。我們要有意識(shí)地讓小表在左邊,大表在右邊

但是如果你用的是inner join,MySQL內(nèi)部會(huì)做優(yōu)化,自動(dòng)讓小表在前大表在后。也就是說(shuō)你怎么寫(xiě),效率都是一樣的。但是left join卻不能自動(dòng)優(yōu)化,這點(diǎn)需要注意!

update語(yǔ)句常用 inner join而不是left join

舉例如下SQL:

(任務(wù)目標(biāo):用f 表字段更新a表字段)

update a inner join b on a.id = b.idinner join c on b.id = c.mainIdinner join d on c.id = d.tableIdinner join e on d.id = e.tidinner join f on e.tid = f.codeset a.Demand_orgid = f.req_org_idwhere xxx = xxx;

update 原則上 都得用inner join。

看上面的SQL,假設(shè)你全部都用的left join做關(guān)聯(lián),由于你最終update 的是 a的字段;假設(shè)a表在left join的過(guò)程中,因?yàn)槟硞€(gè)點(diǎn)匹配不到f表,那么用f 表字段更新a表字段 這一個(gè)過(guò)程中,一旦有任意一個(gè)環(huán)節(jié)匹配不到,那么f 表的字段全都會(huì)用null填充。最終,a表匹配不到f表的數(shù)據(jù),都會(huì)被更新成null !

但是如果你用inner join,用f 表字段更新a表字段 這一個(gè)過(guò)程中,一旦有任意一個(gè)環(huán)節(jié)匹配不到,那么a表匹配不到 f 表的所有數(shù)據(jù)就不會(huì)顯示,也就是說(shuō)不會(huì)更新。

你想想,你都匹配不到數(shù)據(jù)列。你還更新啥,難道更新null嗎。基于上面的原因,inner join 其實(shí)就滿足需求了

況且!left join 要考慮這幾張表的大小關(guān)系,誰(shuí)大誰(shuí)小,小結(jié)果集驅(qū)動(dòng)大結(jié)果集。但是inner join 就完全不用考慮此問(wèn)題,因?yàn)?strong>inner join MySQL內(nèi)部會(huì)做優(yōu)化,自動(dòng)讓小表在前大表在后。

到此這篇關(guān)于MySQL中的 inner join 和 left join的區(qū)別的文章就介紹到這了,更多相關(guān)mysql inner join 和 left join區(qū)別內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: MySQL
主站蜘蛛池模板: 捆扎机_气动捆扎机_钢带捆扎机-沈阳海鹞气动钢带捆扎机公司 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 杭州双螺杆挤出机-百科| 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 柔性测斜仪_滑动测斜仪-广州杰芯科技有限公司 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | CE认证_产品欧盟ROHS-REACH检测机构-商通检测 | 物流公司电话|附近物流公司电话上门取货 | 探鸣起名网-品牌起名-英文商标起名-公司命名-企业取名包满意 | 电脑刺绣_绣花厂家_绣花章仔_织唛厂家-[源欣刺绣]潮牌刺绣打版定制绣花加工厂家 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 上海风淋室_上海风淋室厂家_上海风淋室价格_上海伯淋 | 工业插头-工业插头插座【厂家】-温州罗曼电气 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 船用锚链|专业锚链生产厂家|安徽亚太锚链制造有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 钢衬玻璃厂家,钢衬玻璃管道 -山东东兴扬防腐设备有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 工业PH计|工业ph酸度计|在线PH计价格-合肥卓尔仪器仪表有限公司 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 螺旋丝杆升降机-SWL蜗轮-滚珠丝杆升降机厂家-山东明泰传动机械有限公司 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 世纪豪门官网 世纪豪门集成吊顶加盟电话 世纪豪门售后电话 |