Sql中left join、right join和inner j
2018-09-06 本文已影响0人
秦舒话
- 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并不以哪张表的记录为基础的;它只查询符合条件的记录