mysql的natural join_MySQL基础之Natural Join用法
Natural join即自然連接,natural join等同于inner join或inner using,其作用是將兩個(gè)表中具有相同名稱的列進(jìn)行匹配
用https://www.w3resource.com的圖例:
Natural join特征:
關(guān)聯(lián)的表具有一對或多對同名的列
連接時(shí)候不需要使用on或者using關(guān)鍵字
建立兩張表:
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;
往兩張表寫數(shù)據(jù):
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');
內(nèi)連接查詢id相同的數(shù)據(jù)
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,接著驗(yàn)證列類型不一樣是否還可以繼續(xù)關(guān)聯(lián),本博客只在mysql5.7版本驗(yàn)證
修改一下t1的id類型
ALTER TABLE t1 MODIFY id VARCHAR(50);
繼續(xù)查詢,用natural join,驗(yàn)證后發(fā)現(xiàn)還可以查詢的
SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 NATURAL JOIN t2;
用內(nèi)連接的方法,ps:Oracle里id類型不一樣(一個(gè)為int,一個(gè)為varchar)是會報(bào)錯(cuò)的,不過我在5.7版本驗(yàn)證,并沒有報(bào)錯(cuò)
SELECT t1.id,t2.id,desc1,desc2,desc3,desc4 FROM t1 INNER JOIN t2 ON t1.id = t2.id;
所以,我懷疑是否因?yàn)閟ql_mode沒有開啟為嚴(yán)格模式導(dǎo)致的?
SET @session.sql_mode = 'STRICT_TRANS_TABLES';
開啟嚴(yán)格模式,繼續(xù)查詢都沒問題,所以mysql的語法還是相對沒那么嚴(yán)格限制的
ok,綜上,可以得出,natural join只是根據(jù)列的名稱和數(shù)據(jù)進(jìn)行關(guān)聯(lián)而已,在5.7版本并沒有限制要求列的類型要一樣,而且natural join連接時(shí)候也不需要使用on或者using關(guān)鍵字
本文分享 CSDN - smileNicky。
如有侵權(quán),請聯(lián)系 support@oschina.cn 刪除。
本文參與“OSC源創(chuàng)計(jì)劃”,歡迎正在閱讀的你也加入,一起分享。
總結(jié)
以上是生活随笔為你收集整理的mysql的natural join_MySQL基础之Natural Join用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创造与魔法新版陆行鸟在哪
- 下一篇: mysql order by sql注入