MySQL基礎之Natural Join用法

Natural join即天然鏈接,natural join等同於inner join或inner using,其做用是將兩個表中具備相同名稱的列進行匹配mysql

用https://www.w3resource.com的圖例:
在這裏插入圖片描述sql

Natural join特徵:session

  • 關聯的表具備一對或多對同名的列
  • 鏈接時候不須要使用on或者using關鍵字

創建兩張表:3d

CREATE TABLE t1(id INT,desc1 VARCHAR(50),desc2 VARCHAR(50))ENGINE=INNODB;
CREATE TABLE t2(id INT,desc3 VARCHAR(50),desc4 VARCHAR(50))ENGINE=INNODB;

往兩張表寫數據:code

INSERT INTO t1(id,desc1,desc2) VALUES(100,'desc11','desc12'),(101,'desc21','desc22'),(102,'desc31','desc32');
INSERT INTO t2(id,desc3,desc4) VALUES(101,'desc41','desc42'),(103,'desc51','desc52'),(105,'desc61','desc62');

內鏈接查詢id相同的數據blog

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 INNER JOIN t2 ON t1.id = t2.id;

natural join鏈接查詢的效果等同於如上sql圖片

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 NATURAL JOIN t2;

在這裏插入圖片描述
ok,接着驗證列類型不同是否還能夠繼續關聯,本博客只在mysql5.7版本驗證
在這裏插入圖片描述
修改一下t1的id類型博客

ALTER TABLE t1 MODIFY id VARCHAR(50);

繼續查詢,用natural join,驗證後發現還能夠查詢的io

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 NATURAL JOIN t2;

用內鏈接的方法,ps:Oracle裏id類型不同(一個爲int,一個爲varchar)是會報錯的,不過我在5.7版本驗證,並無報錯class

SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 INNER JOIN t2 ON t1.id = t2.id;

因此,我懷疑是否由於sql_mode沒有開啓爲嚴格模式致使的?

SET @session.sql_mode = 'STRICT_TRANS_TABLES';

開啓嚴格模式,繼續查詢都沒問題,因此mysql的語法仍是相對沒那麼嚴格限制的

ok,綜上,能夠得出,natural join只是根據列的名稱和數據進行關聯而已,在5.7版本並無限制要求列的類型要同樣,並且natural join鏈接時候也不須要使用on或者using關鍵字

相關文章
相關標籤/搜索