当前位置: > 数据库 > MySQL >

详解mysql语法left join,right join,inner join

时间:2015-10-08 12:43来源:linux.it.net.cn 作者:IT

测试表用户表user:

测试表密码表pwd:

1、创建user表:

 
1
2
3
4
5
6
CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `password` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、创建pwd表:
?
1
2
3
4
5
6
CREATE TABLE `pwd` (
  `id` int(11) NOT NULL auto_increment,
  `userid` int(11) default NULL,
  `passwd` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


 

3、使用inner join 将pwd表中的passwd填入到user表中的password列(根据userid),SQL语句:

 

1
2
3
4
UPDATE `user` U
INNER JOIN `pwd` P
ON P.userid=U.id
SET U.password = P.passwd;



 
4、 left join(左联接) 查询user中的信息

 

 
1
2
3
SELECT us.*,pw.* FROM `user` us 
LEFT JOIN pwd pw
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
2
3
SELECT us.*,pw.* FROM `user` us 
RIGHT JOIN pwd pw
ON pw.userid=us.id;
结果:

说明:

和left join的结果刚好相反,这次是以右表(pwd)为基础的,user表不足的地方用NULL填充. 



 

6、inner join(相等联接或内联接) 

 

 
1
2
3
SELECT us.*,pw.* FROM `user` us 
inner JOIN pwd pw
ON pw.userid=us.id;
结果:

说明:

很明显,这里只显示出了 pw.userid=us.id的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录. 



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容