mysql的幾個(gè)連接查詢的圖解

空余時(shí)間整理下,mysql的幾種連接查詢,幾個(gè)基本的概念需要記錄下,其他直接用圖解,相對直觀~??

連接查詢

連接查詢:將多張表連到一起進(jìn)行查詢(會(huì)導(dǎo)致記錄數(shù)行和字段數(shù)列發(fā)生改變)

連接查詢的意義

在關(guān)系型數(shù)據(jù)庫設(shè)計(jì)過程中,實(shí)體(表)與實(shí)體之間是存在很多聯(lián)系的。在關(guān)系型數(shù)據(jù)庫表的設(shè)計(jì)過程中,遵循著關(guān)系來設(shè)計(jì):一對一,一對多和多對多,通常在實(shí)際操作的過程中,需要利用這層關(guān)系來保證數(shù)據(jù)的完整性。

連接查詢的種類

  1. 交叉連接

    交叉連接:將兩張表的數(shù)據(jù)與另外一張表彼此交叉

    原理:

    1. 從第一張表依次取出每一條記錄
    2. 取出每一條記錄之后,與另外一張表的全部記錄挨個(gè)匹配
    3. 沒有任何匹配條件,所有的結(jié)果都會(huì)進(jìn)行保留
    4. 記錄數(shù) = 第一張表記錄數(shù) * 第二張表記錄數(shù);字段數(shù) = 第一張表字段數(shù) + 第二張表字段數(shù)(笛卡爾積)

    語法: 基本語法:表1 cross join 表2;

    應(yīng)用: 交叉連接產(chǎn)生的結(jié)果是笛卡爾積,沒有實(shí)際應(yīng)用。

  1. 內(nèi)連接

    原理:

    關(guān)鍵字inner join,從一張表中取出所有的記錄去另外一張表中匹配:利用匹配條件進(jìn)行匹配,成功了則保留,失敗了放棄。

    1. 從第一張表中取出一條記錄,然后去另外一張表中進(jìn)行匹配
    2. 利用匹配條件進(jìn)行匹配:
      1. 匹配到:保留,繼續(xù)向下匹配
      2. 匹配失?。合蛳吕^續(xù),如果全表匹配失敗,結(jié)束

語法: 表1 [inner] join 表2 on 匹配條件;

  1. 如果內(nèi)連接沒有條件(允許),那么其實(shí)就是交叉連接(避免)
  2. 使用匹配條件進(jìn)行匹配
  3. 因?yàn)楸淼脑O(shè)計(jì)通常容易產(chǎn)生同名字段,尤其是ID,所以為了避免重名出現(xiàn)錯(cuò)誤,通常使用表名.字段名,來確保唯一性
  4. 通常,如果條件中使用到對應(yīng)的表名,而表名通常比較長,所以可以通過表別名來簡化
  5. 內(nèi)連接匹配的時(shí)候,必須保證匹配到才會(huì)保存
  6. 內(nèi)連接因?yàn)椴粡?qiáng)制必須使用匹配條件(on)因此可以在數(shù)據(jù)匹配完成之后,使用where條件來限制,效果與on一樣(建議使用on)

應(yīng)用:

內(nèi)連接通常是在對數(shù)據(jù)有精確要求的地方使用:必須保證兩種表中都能進(jìn)行數(shù)據(jù)匹配。

  1. 外連接

    關(guān)鍵字:outer join,按照某一張表作為主表(表中所有記錄在最后都會(huì)保留),根據(jù)條件去連接另外一張表,從而得到目標(biāo)數(shù)據(jù)。

    外連接分為兩種:左外連接(left join),右外連接(right join)

    左連接:左表是主表

    右連接:右表是主表

    原理:

    1. 確定連接主表:左連接就是left join左邊的表為主表;right join就是右邊為主表
    2. 拿主表的每一條記錄,去匹配另外一張表(從表)的每一條記錄
    3. 如果滿足匹配條件:保留;不滿足即不保留
    4. 如果主表記錄在從表中一條都沒有匹配成功,那么也要保留該記錄:從表對應(yīng)的字段值都未NULL

    語法:

    左連接:主表 left join 從表 on 連接條件;

    右連接:從表 right join 主表 on連接條件;

    應(yīng)用:

    非常常用的一種獲取的數(shù)據(jù)方式:作為數(shù)據(jù)獲取對應(yīng)主表以及其他數(shù)據(jù)(關(guān)聯(lián))

外連接

左連接

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

left join 是left outer join的簡寫,它的全稱是左外連接,是外連接中的一種。

左(外)連接,左表(a_table)的記錄將會(huì)全部表示出來,而右表(b_table)只會(huì)顯示符合搜索條件的記錄。右表記錄不足的地方均為NULL。

img

右連接

select * from a right join b on a.id = b.id

right join是right outer join的簡寫,它的全稱是右外連接,是外連接中的一種。

與左(外)連接相反,右(外)連接,左表(a_table)只會(huì)顯示符合搜索條件的記錄,而右表(b_table)的記錄將會(huì)全部表示出來。左表記錄不足的地方均為NULL。

img

全連接

MySQL目前不支持此種方式,可以用其他方式替代解決。

內(nèi)連接

select * from a inner join b on a.id = b.id;

組合兩個(gè)表中的記錄,返回關(guān)聯(lián)字段相符的記錄,也就是返回兩個(gè)表的交集(陰影)部分。

img

參考文檔(侵聯(lián)刪)

  1. https://blog.csdn.net/plg17/article/details/78758593
  2. https://blog.csdn.net/JavaCoder_juejue/article/details/83037521
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容