inner join
: 内连接,获取两个表中字段匹配关系的记录;left join
: 左连接,获取左表所有记录,即使右表没有对应匹配的记录;right join
: 右连接,与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录;(图片来自http://www.runoob.com/mysql/mysql-join.html)
1.内连接
2.左连接
3.右连接
表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 |
tableA
和tableB
有相同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
类似,只是使用的是右边的表。