假设A表结构:
id | hma |
---|---|
2 | 001 |
1 | 001 |
1 | 001 |
B表结构:
id | hmb | dm |
---|---|---|
1 | 001 | 20 |
1、左连接(LEFT JOIN)
SELECT A.id, A.hma, B.id, B.hmb, B.dm FROM A
LEFT JOIN B ON A.id = B.id AND A.hma = B.hmb;
结果包含表 A
的所有行。如果在表 B
中找不到匹配的行,则对应的 B
表列值为 NULL
。
id | hma | id | hmb | dm |
---|---|---|---|---|
2 | 001 | NULL | NULL | NULL |
1 | 001 | 1 | 001 | 20 |
1 | 001 | 1 | 001 | 20 |
2、右连接(RIGHT JOIN)
SELECT A.id, A.hma, B.id, B.hmb, B.dm FROM A
RIGHT JOIN B ON A.id = B.id AND A.hma = B.hmb;
结果将包含表 B
的所有匹配行。如果在表 A
中找不到匹配的行,则对应的 A
表列值为 NULL
。
id | hma | id | hmb | dm |
---|---|---|---|---|
1 | 001 | 1 | 001 | 20 |
1 | 001 | 1 | 001 | 20 |
3、内连接(INNER JOIN)
SELECT A.id, A.hma, B.id, B.hmb, B.dm FROM A
INNER JOIN B ON A.id = B.id AND A.hma = B.hmb;
结果只包含在两个表中都能找到匹配的行。
id | hma | id | hmb | dm |
---|---|---|---|---|
1 | 001 | 1 | 001 | 20 |
1 | 001 | 1 | 001 | 20 |
4、全外连接(FULL OUTER JOIN)
SELECT A.id, A.hma, B.id, B.hmb, B.dm FROM A
FULL OUTER JOIN B ON A.id = B.id ;
结果将包含两个表中的所有行。如果在另一个表中找不到匹配的行,则对应的列值为 NULL
。结合了left join + union + right join
id | hma | id | hmb | dm |
---|---|---|---|---|
2 | 001 | NULL | NULL | NULL |
1 | 001 | 1 | 001 | 20 |
不当之处请批评指正。