定义2个表A、B
A表
id name age
1 lei12
2 mao1
3 zhang23
B表
id name age
1 lei22
2 lei2
4 mao 1
5 lei66
6 gao99
一、Inner Join:
SELECT * FROM test.a INNER JOIN test.b
on a.`name` = b.`name`
就是当A表中的name和B表的name相等时的结果集,遍历A表name,如果B表中name和A表相等,则显示该记录
id nameageid1 name1age1
1 lei 121lei 22
1 lei12 2 lei2
2 mao1 4 mao 1
1 lei12 5 lei 66
ps:其在寓意上和我们平时写的
SELECT * FROM test.a, test.b where a.`name` = b.`name`
是一样的。
二、Left join:是left outer join的缩写
左连接,以A表为准,查询结果显示A表所有记录,如果B表有匹配的,则显示,如果没有,则显示为null
SELECT * FROM test.a LEFT JOIN test.b
on a.`name` = b.`name`
id name age id1 name1 age1
1 lei121lei 22
1 lei 122lei2
1 lei 125lei66
2 mao 14mao1
3 zhang 23 null null null
三、right join:是right outer join的缩写
右连接、以B表为主表,查询结果显示B表所有记录,如果A表有匹配的,则显示A表记录字段,如果没有,则显示null
SELECT * FROM test.a RIGHT JOIN test.b
on a.`name` = b.`name`
id nameageid1name1age1
1lei12 1lei22
1 lei122 lei 2
2 mao14 mao 1
1 lei125 lei66
null nullnull6gao99
四、full join:
全连接,查询结果显示A表和B的所有记录,如果A表没有匹配的,则A表记录列显示,否则显示为null,如果B表有匹配的,
显示B表列显示B表记录字段值,如果B表没有,B表列显示null
因为mysql中不支持full join,故采用另外一种方式
SELECT * FROM test.a LEFT JOIN test.b
on a.`name` = b.`name`
UNION
SELECT * FROM test.a RIGHT JOIN test.b
on a.`name` = b.`name`
id name age id1name1age1
1 lei 121lei22
1 lei 12 2lei2
1 lei12 5 lei 66
2 mao1 4mao1
3 zhang2 3 nullnull
null null null 6gao 99
SQL中LEFT JOIN、Inner Join、Right Join、Left Outer Join、full join区别
最新推荐文章于 2024-03-13 15:56:43 发布