一般两个表之间的联接可分为以下几类:
1、内联接
内连接又包括等值连接,非等值连接,默认的是等值链接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
2、外联接。
外联接可以是左向外联接、右向外联接或完整外部联接。在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
1)LEFT JOIN或LEFT OUTER JOIN
2)RIGHT JOIN 或 RIGHT OUTER JOIN
3)FULL JOIN 或 FULL OUTER JOIN
3、 完全连接
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积.
简单的说,如图:
1、a表 内连接 b表 = AB;
2、a表 左链接 b表 = A+AB;
3、a表 右链接 b表 = AB+B;
4、a表 完全链接 b表 = A+AB+B;
例子:
a表 :
id | name |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
b表:
id | age | aId |
---|---|---|
1 | 11 | 1 |
2 | 22 | 2 |
3 | 33 | 4 |
a表 id 对应 b表 aId
1) 内连接
select a.*,b.* from a inner join b on a.id=b.aId
结果是:
id | name | id | age | aId |
---|---|---|---|---|
1 | 张三 | 1 | 11 | 1 |
2 | 李四 | 2 | 22 | 2 |
2)左连接
select a.*,b.* from a left join b on a.id=b.aId
结果是:
id | name | id | age | aId |
---|---|---|---|---|
1 | 张三 | 1 | 11 | 1 |
2 | 李四 | 2 | 22 | 2 |
3 | 王五 | null | null | null |
3) 右连接
select a.*,b.* from a right join b on a.id=b.aId
结果是:
id | name | id | age | aId |
---|---|---|---|---|
1 | 张三 | 1 | 11 | 1 |
2 | 李四 | 2 | 22 | 2 |
null | null | 3 | 33 | 4 |
4) 完全连接
select a.*,b.* from a full join b on a.id=b.aId
结果是:
id | name | id | age | aId |
---|---|---|---|---|
1 | 张三 | 1 | 11 | 1 |
2 | 李四 | 2 | 22 | 2 |
3 | 王五 | null | null | null |
null | null | 3 | 33 | 4 |