溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中左連接/右連接/等值連接有什么區(qū)別

發(fā)布時間:2022-01-14 15:57:32 來源:億速云 閱讀:178 作者:小新 欄目:數(shù)據(jù)庫

這篇文章給大家分享的是有關(guān)MySQL中左連接/右連接/等值連接有什么區(qū)別的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

從業(yè)以來,發(fā)現(xiàn)很多技術(shù)人員和同事向筆者或是在網(wǎng)絡(luò)上咨詢過LEFT JOIN 如何寫及其特性,而等值連接一般都沒問題,幾年前曾經(jīng)寫過一份Microsoft SQL Server版本的,此次特意再寫一份MySQL版本的,希望閱讀過的技術(shù)人員,可以起到解惑功效?! ?/p>

1、三種連接的語法
  為便于更多的技友快速讀懂、理解,我們只討論2張表對象進(jìn)行連接操作的情況,大于2張表對象進(jìn)行的連接操作原理也是一樣的。
  左連接(LEFT JOIN )


SELECT M.columnname……,N.* columnname…..FROM left_table M LEFT JOIN right_table N ON M. columnname_join=N. columnname_join AND N. columnname=XXX WHERE M.columnname=XXX…..

  右連接(RIGHT JOIN)


SELECT M.columnname……,N.* columnname…..FROM left_table M RIGHT JOIN right_table N ON M. columnname_join=N. columnname_join AND M. columnname=XXXWHERE N.columnname=XXX…..

  等值連接


SELECT M.columnname……,N.* columnname…..FROM left_table M [INNER] JOIN right_table N ON M. columnname_join=N. columnname_joinWHERE M.columnname=XXX….. AND N.columnname=XXX….

或者


SELECT M.columnname……,N.* columnname…..FROM left_table M  ,  right_table NWHERE M. columnname_join=N. columnname_join  AND  M.columnname=XXX….. AND N.columnname=XXX….

  備注:注意上面SQL語法中加粗的紅色字體部分,三種不同連接語法的變化。

  三種連接的特性
  左連接(LEFT JOIN )
   ON字句連接條件,用于把2表中等值的記錄連接在一起,但是不影響記錄集的數(shù)量。若是表left_table中的某記錄,無法在表 right_table找到對應(yīng)的記錄,則此記錄依然顯示在記錄集鐘,只表 right_table需要在查詢顯示的列的值用NULL替代;
  ON字句連接條件中表right_table. columnname=XXX用于控制right_table表是否有符合要求的列值還是用NULL替換的方式顯示在查詢列中,不影響記錄集的數(shù)量;
  WHERE字句控制記錄是否符合查詢要求,不符合則過濾掉;
  總結(jié):ON字句控制right_table的列值符合顯示,還是不符合就用NULL替換,不影響最終符合查詢要求的記錄集;WHERE字句是控制那些記錄是顯示在最終的記錄集中。
  右連接(RIGHT JOIN)
  ON字句連接條件,用于把2表中等值的記錄連接在一起,若是表right_table中的某記錄,無法在表left_table找到對應(yīng)的記錄,則表 left_able需要在查詢顯示的列的值用NULL替代;
  ON字句連接條件中表left_table. columnname=XXX用于控制left_table表是否有符合要求的列值,還是用NULL替換的方式顯示在查詢列表中;
  WHERE字句控制記錄是否符合查詢要求,不符合則過濾掉;
   總結(jié):ON字句控制left_table的列值符合顯示,還是不符合而用NULL替換掉,不影響最終符合查詢要求的記錄集;WHERE字句是控制那些記 錄是顯示在最終的記錄集中。我們會發(fā)現(xiàn)LEFT JOIN 和RIGHT JOIN是類似的,只是以連接關(guān)鍵字左邊還是右邊表為準(zhǔn)匹配。
  等值連接
  ON 字句連接條件,不再與左連接或右連接的功效一樣,除了作為2表記錄匹配的條件外,還會起到過濾記錄的作用,若left_table中記錄無法在right_table中找到對應(yīng)的記錄,則會被過濾掉;
  WHERE字句,不管是涉及表left_table、表right_table上的限制條件,還是涉及2表連接的條件,都會對記錄集起到過濾作用,把不符合要求的記錄刷選掉;

  連接語法的測試環(huán)境
  測試用表結(jié)構(gòu)


CREATE TABLE left_table(ID INT UNSIGNED NOT NULL AUTO_INCREMENT,                     Username VARCHAR(40) NOT NULL,                     Birthday DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',                     CityID     SMALLINT NOT NULL DEFAULT 0,                CreatDate  TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',                AlterDate  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,                         PRIMARY KEY(ID),                         KEY idx_username(Username)                 )ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';     CREATE TABLE right_table(UID INT UNSIGNED NOT NULL ,                 CollectNum MEDIUMINT NOT NULL DEFAULT 0,                 BuyNum     MEDIUMINT NOT NULL DEFAULT 0,                 SearchNum  MEDIUMINT NOT NULL DEFAULT 0,                 CreatDate  TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',                AlterDate  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,                PRIMARY KEY(UID)                    )ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

  用于測試的數(shù)據(jù)
  重復(fù)執(zhí)行10次INSERT*** VALUE ***語句:

感謝各位的閱讀!關(guān)于“MySQL中左連接/右連接/等值連接有什么區(qū)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI