数据库之连接
数据库中多表之间的查询通常使用连接的方式来实现。连接分为内连接、外连接和交叉连接。
内连接:内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。包括相等连接和自然连接。
外连接:外连接又分为左外连接、右外连接和完整外连接。
1. 左外连接(LEFT JOIN或LEFT OUTER JOIN):左外连接的结果集包括 LEFT JOIN子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
2. 右外连接(RIGHT JOIN或RIGHT OUTER JOIN):右外连接是左外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
3. 完整外连接(FULL JOIN或FULL OUTER JOIN):完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
交叉连接:交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
A表 |
B表 | |||
id |
name |
id |
age |
parent_id |
1 |
张三 |
1 |
23 |
1 |
2 |
李四 |
2 |
24 |
2 |
3 |
王五 |
3 |
25 |
4 |
内连接
select a.*, b.* from a inner join b on a.id=b.parent_id | ||||
1 |
张三 |
1 |
23 |
1 |
2 |
李四 |
2 |
24 |
2 |
左连接
select a.*, b.* from a left join b on a.id=b.parent_id | ||||
1 |
张三 |
1 |
23 |
1 |
2 |
李四 |
2 |
24 |
2 |
3 |
王五 |
null |
null |
null |
右连接
select a.*, b.* from a right join b on a.id=b.parent_id | ||||
1 |
张三 |
1 |
23 |
1 |
2 |
李四 |
2 |
24 |
2 |
null |
null |
3 |
25 |
4 |
完全连接
select a.*, b.* from a full join b on a.id=b.parent_id | ||||
1 |
张三 |
1 |
23 |
1 |
2 |
李四 |
2 |
24 |
2 |
null |
null |
3 |
25 |
4 |
3 |
王五 |
null |
null |
null |