SQL joins
网上很多文章说法要么示例太简单, 不够全面,要么说法还有错,
下图已经很清晰,可是有些情况,我觉得没有表示出来,如a和b有一对多关系式,a中的记录会有重复;
归纳下自己的理解, 便于自己后续回顾:
- 先假设a,b表,均只有一列,分别为a,b;
mysql> select * from a;
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
mysql> select * from b;
+------+
| b |
+------+
| 3 |
| 4 |
| 5 |
| 6 |
| 4 |
+------+
- 左连接:
mysql> select * from a LEFT JOIN b on a.a = b.b;
+------+------+
| a | b |
+------+------+
| 1 | NULL |
| 2 | NULL |
| 3 | 3 |
| 4 | 4 |
| 4 | 4 |
+------+------+
a表所有记录 + b表中和a表有关联的记录(不包括同A表没有关联的记录),如果a中某(些)条与b有一对多关系,则a表中这(些)条会重复,反之同理,如上图:
等同于: select * from a LEFT OUTER JOIN b on a.a = b.b;
等同于: select * from b RIGHT JOIN a on a.a = b.b;
- 右连接:
mysql> select * from a RIGHT JOIN b on a.a = b.b;
+------+------+
| a | b |
+------+------+
| 3 | 3 |
| 4 | 4 |
| NULL | 5 |
| NULL | 6 |
| 4 | 4 |
+------+------+
b表所有记录 + a表中和B表有关联的记录(不包括同B表没有关联的记录),如果a中某(些)条与b有一对多关系,则a表中这(些)条会重复,反之同理,如上图:
- inner join:
mysql> select * from a inner JOIN b on a.a = b.b;
+------+------+
| a | b |
+------+------+
| 3 | 3 |
| 4 | 4 |
| 4 | 4 |
+------+------+
取a和b所有有关联的记录, 即两表的交集;如果a中某(些)条与b有一对多关系,则a表中这(些)条会重复,反之同理,如上图:
当然如果有任何表述有问题,或者建议欢迎提出来;
reference:
http://stackoverflow.com/questions/448023/what-is-the-difference-between-left-right-outer-and-inner-joins
http://stackoverflow.com/questions/38549/what-is-the-difference-between-inner-join-and-outer-join
转载于:https://my.oschina.net/amince/blog/847667