mysql中join,left join,right join 的区别
先看例子:
首先是join
select vend_name ,prod_price,prod_name from products join vendors on vendors.vend_id = products.vend_id;
结果
+-----------------+------------+---------------------+ | vend_name | prod_price | prod_name | +-----------------+------------+---------------------+ | Bears R Us | 5.99 | 8 inch teddy bear | | Bears R Us | 8.99 | 12 inch teddy bear | | Bears R Us | 11.99 | 18 inch teddy bear | | Doll House Inc. | 3.49 | Fish bean bag toy | | Doll House Inc. | 3.49 | Bird bean bag toy | | Doll House Inc. | 3.49 | Rabbit bean bag toy | | Doll House Inc. | 4.99 | Raggedy Ann | | Fun and Games | 9.49 | King doll | | Fun and Games | 9.49 | Queen doll | +-----------------+------------+---------------------+
left join
select vend_name ,prod_price,prod_name from products left join vendors on vendors.vend_id = products.vend_id;
结果
+-----------------+------------+---------------------+ | vend_name | prod_price | prod_name | +-----------------+------------+---------------------+ | Doll House Inc. | 3.49 | Fish bean bag toy | | Doll House Inc. | 3.49 | Bird bean bag toy | | Doll House Inc. | 3.49 | Rabbit bean bag toy | | Bears R Us | 5.99 | 8 inch teddy bear | | Bears R Us | 8.99 | 12 inch teddy bear | | Bears R Us | 11.99 | 18 inch teddy bear | | Doll House Inc. | 4.99 | Raggedy Ann | | Fun and Games | 9.49 | King doll | | Fun and Games | 9.49 | Queen doll | +-----------------+------------+---------------------+
right join的情况呢
select vend_name ,prod_price,prod_name from products right join vendors on vendors.vend_id = products.vend_id;
+-----------------+------------+---------------------+ | vend_name | prod_price | prod_name | +-----------------+------------+---------------------+ | Bear Emporium | NULL | NULL | | Bears R Us | 5.99 | 8 inch teddy bear | | Bears R Us | 8.99 | 12 inch teddy bear | | Bears R Us | 11.99 | 18 inch teddy bear | | Doll House Inc. | 3.49 | Fish bean bag toy | | Doll House Inc. | 3.49 | Bird bean bag toy | | Doll House Inc. | 3.49 | Rabbit bean bag toy | | Doll House Inc. | 4.99 | Raggedy Ann | | Fun and Games | 9.49 | King doll | | Fun and Games | 9.49 | Queen doll | | Furball Inc. | NULL | NULL | | Jouets et ours | NULL | NULL | +-----------------+------------+---------------------+
总结:join 的结果会和left join或者right join的其一的结果一样,顺序不同,不知道为什么呢,left join 左联结优先考虑左表,即products ,得到的结果行数和products表的行数一样,right join 右联结,有线考虑右表,即vendors ,得到的结果和右表vendors的行数一样,无法匹配的时候用NULL值填充。