真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql中l(wèi)eftjoin設(shè)置條件在on與where時(shí)的用法區(qū)別分析

本文實(shí)例講述了MySQL中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別。分享給大家供大家參考,具體如下:

創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供英吉沙企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為英吉沙眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

一、首先我們準(zhǔn)備兩張表來(lái)進(jìn)行測(cè)試。

CREATE TABLE `a` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `name` varchar(32) DEFAULT '' COMMENT '名稱',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `b` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `a_id` int(11) DEFAULT '0' COMMENT 'a表ID',
 `name` varchar(32) DEFAULT '' COMMENT '名稱',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

兩個(gè)表的數(shù)據(jù)如圖所示:

mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析

運(yùn)行下面左連接查詢:

select * from a left join b on a.id = b.a_id;

mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析

我們分別在on和where后面加上條件,看看執(zhí)行結(jié)果是否相同。

select * from a left join b on a.id = b.a_id and b.id > 3;

mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析

select * from a left join b on a.id = b.a_id where b.id > 3;

mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析

上面的兩條語(yǔ)句,條件我們?cè)O(shè)置的是一樣的都是b.id > 3,為什么顯示結(jié)果不同。

sql語(yǔ)句查詢的關(guān)鍵字順序一般為 from > where > group by > having > order by

left join 在 from范圍,on 條件會(huì)先對(duì) left join 的右表進(jìn)行篩選,篩選完后的結(jié)果 where 再進(jìn)行篩選。

多個(gè) left join 會(huì)生成一張臨時(shí)表,on 條件是對(duì) left join 右表進(jìn)行條件過(guò)濾,where 條件針對(duì)最后生成的臨時(shí)表進(jìn)行過(guò)濾。

所以:

b.id > 3 的條件如果寫(xiě)在 on 后面,則是先對(duì)右邊表(關(guān)聯(lián)表)進(jìn)行篩選,得出符合條件的行,然后主表 left join ,返回主表所有的行,右邊表沒(méi)匹配上的用 null 表示。

b.id > 3 的條件如果寫(xiě)在 where 后面,則是先主表 left join 右邊表(關(guān)聯(lián)表),返回所有的行,然后 where 條件再對(duì)結(jié)果進(jìn)行篩選。

注意:on 后面的條件是針對(duì)右邊的表(關(guān)聯(lián)表),對(duì)主表沒(méi)什么作用。

select * from a left join b on a.id = b.a_id and a.id > 3;

mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析

我們?cè)趏n 后面添加了對(duì)主表的條件 a.id > 3,不過(guò)主表的數(shù)據(jù)仍然全部顯示出來(lái)了,但是影響了右邊表(關(guān)聯(lián)表)的顯示。

如果想要對(duì)主表進(jìn)行篩選,應(yīng)該把條件寫(xiě)在where后。

select * from a left join b on a.id = b.a_id where a.id > 3;

mysql中l(wèi)eft join設(shè)置條件在on與where時(shí)的用法區(qū)別分析

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。


名稱欄目:mysql中l(wèi)eftjoin設(shè)置條件在on與where時(shí)的用法區(qū)別分析
轉(zhuǎn)載源于:http://weahome.cn/article/ijpdii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部