詳解mysql語法left join,right join,inner join
測試表用戶表user: www.2cto.com
測試表密碼表pwd: www.2cto.com
1、創建user表:
1
CREATE TABLE `user` (
2
`id` int(11) NOT NULL auto_increment,
3
`name` varchar(255) default NULL,
4
`password` varchar(255) default NULL,
5
PRIMARY KEY (`id`)
6
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、創建pwd表:
1
CREATE TABLE `pwd` (
2
`id` int(11) NOT NULL auto_increment,
3
`userid` int(11) default NULL,
4
`passwd` varchar(255) default NULL,
5
PRIMARY KEY (`id`)
6
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、使用inner join 將pwd表中的passwd填入到user表中的password列(根據userid),SQL語句:
1
UPDATE `user` U
2
INNER JOIN `pwd` P
3
ON P.userid=U.id
4
SET U.password = P.passwd;
4、 left join(左聯接) 查詢user中的信息
1
SELECT us.*,pw.* FROM `user` us
2
LEFT JOIN pwd pw
3
ON pw.userid=us.id;
結果:
說明:
left join是以User表的記錄為基礎的,User可以看成左表,pwd可以看成右表,left join是以左表為准的.
換句話說,左表(User)的記錄將會全部表示出來,而右表(pwd)只會顯示符合搜索條件的記錄(例子中為: pw.userid=us.id).
B表記錄不足的地方均為NULL.
5、left join(左聯接) 查詢pwd中的信息
1
SELECT us.*,pw.* FROM `user` us
2
RIGHT JOIN pwd pw
3
ON pw.userid=us.id;
結果:
說明:
和left join的結果剛好相反,這次是以右表(pwd)為基礎的,user表不足的地方用NULL填充.
6、inner join(相等聯接或內聯接)
1
SELECT us.*,pw.* FROM `user` us
2
inner JOIN pwd pw
3
ON pw.userid=us.id;
結果:
說明:
很明顯,這裡只顯示出了 pw.userid=us.id的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.