Sql中left join、right join和inner join的区别

  • left join(左连接)返回左表中的所有记录和右表中连接字段相等的记录
  • right join(右连接)返回右表中的所有记录和左表中连接字段相等的记录
  • inner join(等值连接)返回两个表中联结字段相等的记录

现有两张表:

mysql > select * from left_table
+---id---+---name---+----code----+
|   1    |   零食   |  10344875  |
|   2    |   糕点   |  20983781  |
|   3    |   餐饮   |  39981029  |
|   4    |   娱乐   |  78654654  |
+--------+----------+------------+

mysql > select * from right_table
+---id---+---name---+----code----+
|   1    |   坚果   |  59364875  |
|   2    |   蛋糕   |  87652372  |
|   4    |   网咖   |  87667233  |
|   5    |   攀岩   |  45326756  |
+--------+----------+------------+

left join

mysql > select * from left_table lt
left join right_table rt on lt.id = rt.id
+---id---+---name---+----code----+---id---+---name---+----code----+
|   1    |   零食   |  10344875  |   1    |   坚果   |  59364875  |
|   2    |   糕点   |  20983781  |   2    |   蛋糕   |  87652372  |
|   4    |   娱乐   |  78654654  |   4    |   网咖   |  87667233  |
|   3    |   餐饮   |  39981029  |  null  |   null   |  null      |
+--------+----------+------------+--------+----------+------------+

查询结果记录说明:
left join是以左表(left_table)的记录为基础的。
左表的记录将会全部查询出来,而右表(right_table)只会显示符合搜索条件的记录,右表记录不足的地方均为null。

right join

mysql > select * from left_table lt
right join right_table rt on lt.id = rt.id
+---id---+---name---+----code----+---id---+---name---+----code----+
|   1    |   零食   |  10344875  |   1    |   坚果   |  59364875  |
|   2    |   糕点   |  20983781  |   2    |   蛋糕   |  87652372  |
|   4    |   娱乐   |  78654654  |   4    |   网咖   |  87667233  |
|  null  |   null   |  null      |   5    |   攀岩   |  45326756  |
+--------+----------+------------+--------+----------+------------+

查询结果记录说明:
right join是以右表(right_table)的记录为基础的。
右表的记录将会全部查询出来,而左表(left_table)只会显示符合搜索条件的记录,左表记录不足的地方均为null。

inner join

mysql > select * from left_table lt
inner join right_table rt on lt.id = rt.id
+---id---+---name---+----code----+---id---+---name---+----code----+
|   1    |   零食   |  10344875  |   1    |   坚果   |  59364875  |
|   2    |   糕点   |  20983781  |   2    |   蛋糕   |  87652372  |
|   4    |   娱乐   |  78654654  |   4    |   网咖   |  87667233  |
+--------+----------+------------+--------+----------+------------+

查询结果记录说明:
inner join并不以哪张表的记录为基础的;它只查询符合条件的记录

你可能感兴趣的:(Sql中left join、right join和inner join的区别)