left outer join使用(MSYQL)

代码:

mysql> select * from test1;
+---------+----------+
| user_id | reg_date |
+---------+----------+
|       1 |        2 | 
|       2 |        3 | 
|       5 |        6 | 
|       3 |     NULL | 
|       4 |     NULL | 
+---------+----------+
5 rows in set (0.00 sec)

mysql> select * from test2;
+---------+----------+
| user_id | reg_date |
+---------+----------+
|       1 |        2 | 
|       2 |        3 | 
|       3 |     NULL | 
|       4 |     NULL | 
+---------+----------+
4 rows in set (0.00 sec)

--对于join,这里使用where可以,会转换为on,最好写on
mysql> select t1.user_id,t2.user_id from test1 t1 join test2 t2 where t1.user_id=t2.user_id;
+---------+---------+
| user_id | user_id |
+---------+---------+
|       1 |       1 | 
|       2 |       2 | 
|       3 |       3 | 
|       4 |       4 | 
+---------+---------+
4 rows in set (0.00 sec)

mysql> select t1.user_id,t2.user_id from test1 t1 join test2 t2 on t1.user_id=t2.user_id;
+---------+---------+
| user_id | user_id |
+---------+---------+
|       1 |       1 | 
|       2 |       2 | 
|       3 |       3 | 
|       4 |       4 | 
+---------+---------+
4 rows in set (0.00 sec)

--left outer join ... on的正确写法
mysql> select t1.user_id,t2.user_id from test1 t1 left outer join test2 t2 on t1.user_id=t2.user_id;
+---------+---------+
| user_id | user_id |
+---------+---------+
|       1 |       1 | 
|       2 |       2 | 
|       5 |    NULL | 
|       3 |       3 | 
|       4 |       4 | 
+---------+---------+
5 rows in set (0.00 sec)

--left outer join ... on错误写法,因为有where语句,变成了join了
mysql> select t1.user_id,t2.user_id from test1 t1 left outer join test2 t2 on t1.user_id=t2.user_id where t2.user_id>1;
+---------+---------+
| user_id | user_id |
+---------+---------+
|       2 |       2 | 
|       3 |       3 | 
|       4 |       4 | 
+---------+---------+
3 rows in set (0.00 sec)

--对于join来说,写个where无所谓了,但是最好是规范些,用and + 额外的条件。
mysql> select t1.user_id,t2.user_id from test1 t1 join test2 t2 on t1.user_id=t2.user_id where t2.user_id>1;
+---------+---------+
| user_id | user_id |
+---------+---------+
|       2 |       2 | 
|       3 |       3 | 
|       4 |       4 | 
+---------+---------+
3 rows in set (0.00 sec)

--规范写法
mysql> select t1.user_id,t2.user_id from test1 t1 left outer join test2 t2 on t1.user_id=t2.user_id and t2.user_id>1;
+---------+---------+
| user_id | user_id |
+---------+---------+
|       1 |    NULL | 
|       2 |       2 | 
|       5 |    NULL | 
|       3 |       3 | 
|       4 |       4 | 
+---------+---------+


你可能感兴趣的:(left outer join使用(MSYQL))