在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在使用left jion時,on和where條件的區(qū)別

數(shù)據(jù)分析與開發(fā) ? 來源:數(shù)據(jù)分析與開發(fā) ? 2023-06-16 14:46 ? 次閱讀

前天寫SQL時本想通過 A left B join on and 后面的條件來使查出的兩條記錄變成一條,奈何發(fā)現(xiàn)還是有兩條。

后來發(fā)現(xiàn) join on and 不會過濾結(jié)果記錄條數(shù),只會根據(jù)and后的條件是否顯示 B表的記錄,A表的記錄一定會顯示。

不管and 后面的是A.id=1還是B.id=1,都顯示出A表中所有的記錄,并關(guān)聯(lián)顯示B中對應(yīng)A表中id為1的記錄或者B表中id為1的記錄。

運行sql :

select*fromstudentsleftjoinclasscons.classId=c.idorderbys.id
9995c980-0bf9-11ee-962d-dac502259ad0.png

運行sql :

select*fromstudentsleftjoinclasscons.classId=c.idands.name="張三"orderbys.id
99acf1fa-0bf9-11ee-962d-dac502259ad0.png

運行sql :

select*fromstudentsleftjoinclasscons.classId=c.idandc.name="三年級三班"orderbys.id
99b6cf5e-0bf9-11ee-962d-dac502259ad0.png

數(shù)據(jù)庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然后再將這張臨時表返回給用戶。

在使用left jion時,on和where條件的區(qū)別如下:

1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。

2、where條件是在臨時表生成好后,再對臨時表進(jìn)行過濾的條件。這時已經(jīng)沒有l(wèi)eft join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。

假設(shè)有兩張表:

表1:tab2

id size
1 10
2 20
3 30

表2:tab2

size name
10 AAA
20 BBB
30 CCC

兩條SQL:

1、

select*formtab1leftjointab2on(tab1.size=tab2.size)wheretab2.name=’AAA’

2、

select*formtab1leftjointab2on(tab1.size=tab2.sizeandtab2.name=’AAA’)

第一條SQL的過程:

1、中間表on條件:

tab1.size=tab2.size
99d5a2e4-0bf9-11ee-962d-dac502259ad0.png

2、再對中間表過濾where 條件:

tab2.name=’AAA’
99f17974-0bf9-11ee-962d-dac502259ad0.png

第二條SQL的過程:

1、中間表on條件:

tab1.size=tab2.sizeandtab2.name=’AAA’

(條件不為真也會返回左表中的記錄)9a0ecc2c-0bf9-11ee-962d-dac502259ad0.png

其實以上結(jié)果的關(guān)鍵原因就是left join,right join,full join的特殊性,不管on上的條件是否為真都會返回left或right表中的記錄,full則具有l(wèi)eft和right的特性的并集。而inner jion沒這個特殊性,則條件放在on中和where中,返回的結(jié)果集是相同的。
責(zé)任編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    782

    瀏覽量

    44908
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3905

    瀏覽量

    65879

原文標(biāo)題:SQL 語句中 left join 后用 on 還是 where,區(qū)別大了!

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    Hive查詢之where語句剖析

    黑猴子的家:Hive 查詢之 where 語句
    發(fā)表于 07-12 13:46

    為什么Crosstalk,Left-to-Right 和Right-to-Left是不一樣的?

    看了些D類功放的SPEC,發(fā)現(xiàn)Crosstalk,Left-to-Right 和Right-to-Left是不一樣的?為什么會不一樣?
    發(fā)表于 08-12 06:27

    m3 line stage left channel cir

    m3 line stage left channel circuit
    發(fā)表于 09-08 21:48 ?2171次閱讀
    m3 line stage <b class='flag-5'>left</b> channel cir

    Where Is Ground?

    Where Is Ground? Bill Laumeister
    發(fā)表于 10-02 00:06 ?1087次閱讀
    <b class='flag-5'>Where</b> Is Ground?

    SQL中on條件where條件區(qū)別

    SQL中on條件where條件區(qū)別 數(shù)據(jù)庫通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然后再將這張臨時表返回給用戶。
    發(fā)表于 11-28 14:34 ?3530次閱讀
    SQL中on<b class='flag-5'>條件</b>與<b class='flag-5'>where</b><b class='flag-5'>條件</b>的<b class='flag-5'>區(qū)別</b>

    SQL語句中where條件后為什么要寫上1=1

    這段代碼應(yīng)該是由程序(例如Java)中生成的,where條件中 1=1 之后的條件是通過 if 塊動態(tài)變化的。例如:
    的頭像 發(fā)表于 02-15 14:51 ?5379次閱讀

    C#基礎(chǔ)教程-查詢-復(fù)合from、where子句

    C#基礎(chǔ)教程-查詢-復(fù)合from、where子句(嵌入式開發(fā)平臺排行榜)-文檔為C#基礎(chǔ)教程-查詢-復(fù)合from、where子句總結(jié)文檔,是一份不錯的參考資料,感興趣的可以下載看看,,,,,,,,,,,,,
    發(fā)表于 08-04 14:53 ?1次下載
    C#基礎(chǔ)教程-查詢-復(fù)合from、<b class='flag-5'>where</b>子句

    SQL語句中left join后用on還是where

    來自丨blog.csdn.net/wqc19920906/article/details/79785424 前天寫SQL時本想通過 A left B join on and 后面的條件來使查出的兩條
    的頭像 發(fā)表于 11-22 11:08 ?2344次閱讀

    什么是Shift-Left安全?

    軟件開發(fā)中,Shift-Left是一種幫助開發(fā)人員軟件開發(fā)過程早期發(fā)現(xiàn)漏洞和編碼錯誤的做法。Shift-Left Security是一種有效的方法,它專注于安全性,并有助于
    的頭像 發(fā)表于 05-16 11:31 ?1234次閱讀
    什么是Shift-<b class='flag-5'>Left</b>安全?

    insert后面可以跟where

    可以,"INSERT"語句可以與"WHERE"子句一起使用。"INSERT"語句用于向數(shù)據(jù)庫表中插入新的行,而"WHERE"子句用于指定插入行的條件。 下面是一個示例: INSERT INTO 表名
    的頭像 發(fā)表于 11-21 14:20 ?7969次閱讀

    sql語句where條件查詢

    的細(xì)節(jié),包括使用的操作符、條件的組合、多張表的查詢、條件的性能優(yōu)化等方面。 首先,讓我們了解一下WHERE子句中常用的操作符。SQL中,常用的操作符包括: 比較操作符: 等于(=):
    的頭像 發(fā)表于 11-23 11:28 ?1609次閱讀

    sql怎么where條件判斷

    SQL中,WHERE條件用于篩選符合特定條件的記錄。它提供了一種查詢中過濾數(shù)據(jù)的方法,使您能夠根據(jù)所需的特定
    的頭像 發(fā)表于 11-23 11:30 ?2310次閱讀

    sql where條件的執(zhí)行順序

    深入討論WHERE條件的執(zhí)行順序之前,先回顧一下一般SQL語句的執(zhí)行順序。一條SQL語句的執(zhí)行通常可以分為以下幾個步驟:解析器分析語法、語義校驗、查詢優(yōu)化器生成執(zhí)行計劃、執(zhí)行計劃生成與執(zhí)行。在這個過程中,
    的頭像 發(fā)表于 11-23 11:31 ?2694次閱讀

    sql的where條件多個and順序

    SQL中,WHERE子句用于過濾查詢結(jié)果以提供符合特定條件的記錄。當(dāng)有多個AND操作符時,WHERE子句的順序并不會影響查詢結(jié)果,但是正確的AND操作符順序可以提高查詢的可讀性和性能
    的頭像 發(fā)表于 11-23 11:33 ?4422次閱讀

    sql語句多個條件怎么連接

    SQL中,多個條件可以使用邏輯運算符連接,常用的邏輯運算符有AND、OR和NOT。這些運算符可以幫助我們查詢中指定多個條件以過濾數(shù)據(jù),從而獲得我們需要的結(jié)果集。 AND運算符用于同
    的頭像 發(fā)表于 11-23 11:34 ?2977次閱讀
    主站蜘蛛池模板: 巨骚综合网 | 丁香花五月婷婷开心 | 成人午夜免费剧场 | 欧亚精品卡一卡二卡三 | 迅雷www天堂在线资源 | 超碰v | 四虎影院观看视频在线观看 | 成年大片免费视频播放手机不卡 | 女bbbbxxxx视频| 亚洲婷婷影院 | 手机午夜视频 | 深爱开心激情网 | 国产高清视频在线免费观看 | 亚洲第一视频网 | 四虎影视亚洲精品 | 日本一区二区免费看 | 色综合中文字幕 | 中国美女乱淫免费看视频 | www.射| 日本三级午夜 | 天天鲁天天爽精品视频 | 欧美视频免费一区二区三区 | 国产一级特黄aa级特黄裸毛片 | 奇米影视久久 | 男人j进人女人j 的视频 | 四虎永久免费地址在线网站 | 日韩一卡 二卡 三卡 四卡 免费视频 | 日韩在线视频www色 日韩在线视频免费观看 | 亚洲欧美成人综合久久久 | 久久精品视频观看 | 中文在线最新版天堂bt | 日本黄色电影在线 | 你懂的在线观看视频 | 人人做人人澡人人人爽 | 靠比久久 | 国产亚洲欧美一区二区 | 91精品国产色综合久久不卡蜜 | 制服丝袜中文字幕第一页 | 五月天激情开心网 | 欧美伊人网 | 九九国产在线 |