@Adrian
1、自然连接
自然连接不用指定连接列,也不能使用ON语句,它默认比较两张表里相同的列
2、内连接
内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集中选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他两个表中没有匹配的所有行,所以内连接可能会造成信息的丢失。
3、左外连接
LEFT JOIN或LEFT OUTER JOIN
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
4、右外连接
RIGHT JOIN 或 RIGHT OUTER JOIN
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
5、全连接
FULL JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
例子:
a表:
id | name |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
b表:
id | job | parent_id |
---|---|---|
1 | 23 | 1 |
2 | 34 | 2 |
3 | 34 | 4 |
a.id同parent_id存在关系
1)内连接
select a*,b* from a inner join b on a.id=b.parent_id
id | name | id | job | parent_id |
---|---|---|---|---|
1 | 张三 | 1 | 23 | 1 |
2 | 李四 | 2 | 34 | 2 |
2)左连接
select a*,b* from a left join b on a.id=b.parent_id
id | name | id | job | parent_id |
---|---|---|---|---|
1 | 张三 | 1 | 23 | 1 |
2 | 李四 | 2 | 34 | 2 |
3 | 王五 | null | null | null |
3)右连接
select a*,b* from a right join b on a.id=b.parent_id
id | name | id | job | parent_id |
---|---|---|---|---|
1 | 张三 | 1 | 23 | 1 |
2 | 李四 | 2 | 34 | 2 |
nulll | null | 3 | 34 | 4 |
4)全连接
select a*,b* from a full join b on a.id=b.parent_id
id | name | id | job | parent_id |
---|---|---|---|---|
1 | 张三 | 1 | 23 | 1 |
2 | 李四 | 2 | 34 | 2 |
3 | 王五 | null | null | null |
null | null | 3 | 34 | 4 |