存在两张表,数据如下:
mysql> select * from a;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+----+------+
mysql> select * from b;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 4 | ccc |
+----+------+
mysql> select * from a join b on a.id=b.id;
+----+------+----+------+
| id | name | id | name |
+----+------+----+------+
| 1 | aaa | 1 | aaa |
| 2 | bbb | 2 | bbb |
+----+------+----+------+
存在的关联关系的结果,join相当于我们平时用的where,就是把两张表中同时满足a.id=b.id的数据找出来;
mysql> select * from a left join b on a.id=b.id;
+----+------+------+------+
| id | name | id | name |
+----+------+------+------+
| 1 | aaa | 1 | aaa |
| 2 | bbb | 2 | bbb |
| 3 | ccc | NULL | NULL |
+----+------+------+------+
可见,left join是以左表(a)为参考对象,相当于做一个for循环,把a表的数据一条一条的读取出来,然后根据a.id=b.id的条件到b表中查找数据,在b表中找不到数据的,就填充NULL;
mysql> select * from a right join b on a.id=b.id;
+------+------+----+------+
| id | name | id | name |
+------+------+----+------+
| 1 | aaa | 1 | aaa |
| 2 | bbb | 2 | bbb |
| NULL | NULL | 4 | ccc |
+------+------+----+------+
可见,right join跟left join刚好相反,是以右表(b)为参考对象,相当于做一个for循环,把b表的数据一条一条的读取出来,然后根据a.id=b.id的条件到a表中查找数据,在a表中找不到数据的,就填充NULL;用right join 还不如换个顺序用left join:select * from b left join a on b.id=a.id;
网友评论