例項講解Mysql中各種Join的作用
Mysql4.1開始支援SQL的子查詢。這個技術可以使用SELECT語句來建立一個單列的查詢結果,然後把這個結果作為過濾條件用在另一個查詢中。使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連線(JOIN).. 替代。
Mysql中有左連線(left join)、右連線(right join)和內連線(inner join或者cross join),今天我用一個例項來說明各自的作用:
首先,建立兩個例項資料庫:
表join_a: CREATE TABLE `join_a` ( 表join_b: CREATE TABLE `join_b` ( |
先往表裡插入幾條測試資料
insert into join_a(`name`,`password`) values('xuxingwang','xuxingwang');
insert into join_b(`name`,`sex`,`province`) values('xuxingwang','1','河南');
insert into join_a(`name`,`password`) values('jingzifan','jingzifan');
insert into join_b(`name`,`sex`,`province`) values('baijiangtao','1','河南');
先來看left join:
select * from join_a
left join join_b on join_a.name=join_b.name
結果為:
1 | xuxingwang | xuxingwang | 1 | xuxingwang | 1 | 河南 |
2 | jingzifan | jingzifan | NULL | NULL | NULL | NULL |
再來看right join:
select * from join_a
right join join_b on join_a.name=join_b.name
結果為:
1 | xuxingwang | xuxingwang | 1 | xuxingwang | 1 | 河南 |
NULL | NULL | NULL | 2 | baijiangtao | 1 | 河南 |
而用inner join的時候:
select * from join_a
inner join join_b on join_a.name=join_b.name
結果為:
id | name | password | id | name | sex | province |
---|---|---|---|---|---|---|
1 | xuxingwang | xuxingwang | 1 | xuxingwang | 1 | 河南 |
從上面的結果可以看出,用left join的時候,left join操作符左側表裡的資訊都會被查詢出來,右側表裡沒有的記錄會填空(NULL).right join亦然;inner join的時候則只有條件合適的才會顯示出來