MySQL系列之Natural Join用法

2021-09-29 08:39:40 字數 2077 閱讀 8785

natural join即自然連線,natural join等同於inner join或inner using,其作用是將兩個表中具有相同名稱的列進行匹配

用的圖例:

natural join特徵:

建立兩張表:

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

;

往兩張表寫資料:

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相同的資料

select t1.id,t2.id,desc1,desc2,desc3,desc4 from t1 inner

join t2 on t1.id = t2.id;

natural join連線查詢的效果等同於如上sql

ok,接著驗證列型別不一樣是否還可以繼續關聯,本部落格只在mysql5.7版本驗證

修改一下t1的id型別

alter table t1 modify id varchar(50

);

繼續查詢,用natural join,驗證後發現還可以查詢的

select t1.id,t2.id,desc1,desc2,desc3,desc4 from t1 natural

join t2;

用內連線的方法,ps:oracle裡id型別不一樣(乙個為int,乙個為varchar)是會報錯的,不過我在5.7版本驗證,並沒有報錯

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關鍵字

MySQL系列之鎖

分布式鎖 疑問?什麼是共享鎖?共享鎖 共享讀鎖,排他鎖 獨佔寫鎖 鎖機制與innodb鎖演算法 在關係型資料庫中,可以按照鎖的粒度把資料庫鎖分為行級鎖 innodb引擎 表級鎖 myisam引擎 和頁級鎖 bdb引擎 myisam採用表級鎖 table level locking innodb支援行...

mysql系列之 模糊查詢

1,表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號 表示。比如 select from user where u name like 三 將會把u name為 張三 張貓三 三腳貓 唐三藏 等等有 三 的記錄全找出來。另外,如果需要找出u name中既有 三...

Mysql系列之鎖機制

一般乙個程式滿,從消耗的角度,乙個是cpu,乙個是io,但有的時候mysql慢,是因為某條sql不小心把整個表給鎖了。鎖是計算機協調多個程序或執行緒併發訪問某一資源的機制。在資料庫中,除了傳統的計算機資源 如cpu,ram,i o 的爭用外,資料也是供很多使用者共享的資源。如何保證資料併發訪問的一致...