Mysql 的 inner join、left join、right join

时间:2022-10-18 18:21:24
  1. inner join: 内连接,获取两个表中字段匹配关系的记录;
  2. left join: 左连接,获取左表所有记录,即使右表没有对应匹配的记录;
  3. right join: 右连接,与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录;

    (图片来自http://www.runoob.com/mysql/mysql-join.html)
    1.内连接
    Mysql 的 inner join、left join、right join
    2.左连接
    Mysql 的 inner join、left join、right join
    3.右连接
    Mysql 的 inner join、left join、right join


tableA

id name class
1 hu 2
3 a 3
13 q 3
5 g 2
8 l 1

tableB

name val teacher
hu 10 hut
g 5 gt
l 55 lt

1. 使用 inner join

select a.name, a.id, b.val from tableA as a INNER JOIN tableB as b on a.name = b.name;

结果

name id val
hu 1 10
g 5 5
l 8 55

tableAtableB有相同name的一行相连。
2. 使用left join

select a.name, a.id, b.val from tableA as a LEFT JOIN tableB as b on a.name = b.name;

结果

name id val
hu 1 10
g 5 5
l 8 55
a 3 null
q 13 null

在使用此sql语句

select * from tableA as a LEFT JOIN tableB as b on a.name > b.name;

结果

id name class name val teacher
13 q 3 hu 10 hut
8 l 1 hu 10 hut
1 hu 2 g 5 gt
13 q 3 g 5 gt
8 l 1 g 5 gt
13 q 3 l 55 lt
3 a 3 null null null
5 g 2 nu null null

从结果可以发现,左边表的所有数据都会被选择(不管满不满足on的条件),还是会被使用。

3.使用right join
left join类似,只是使用的是右边的表。