引言
最近正在准备面试,所以又复习了一下这个sql的连接语句,总结出来,分享给大家,如果有问题,还请大家斧正……
理论
1、内联接(典型的联接运算,使用像= 或 <> 之类的比较运算符)。包括相等联接和自然联接。
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
2、外联接
分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。(通常我们省略outer这个关键字)
(1)LEFT JOIN
左外联接的结果集包括LEFT OUTER字句中制定的左表的所有行,而不仅仅是联接所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
(2)RIGHT JOIN
右外联接是左外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
(3)FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
实例
A表
studentID | Name |
1 | 张三 |
2 | 李四 |
3 | 王五 |
B表
courseID | courseName | studentID |
1 | 一班 | 1 |
2 | 二班 | 2 |
3 | 三班 | 4 |
(1) 内连接
Select A.*,B.* from A inner join B on A.studentID =B.studentID
结果:
studentID | Name | courseID | courseName | studentID |
1 | 张三 | 1 | 一班 | 1 |
2 | 李四 | 2 | 二班 | 2 |
(2) 左联接
Select A.*,B.* from A left join B on A.studentID =B.studentID
结果:
studentID | Name | courseID | courseName | studentID |
1 | 张三 | 1 | 一班 | 1 |
2 | 李四 | 2 | 二班 | 2 |
3 | 王五 | Null | Null | Null |
(3) 右联接
Select A.*,B.* from A right join B on A.studentID =B.studentID
结果:
studentID | Name | courseID | courseName | studentID |
1 | 张三 | 1 | 一班 | 1 |
2 | 李四 | 2 | 二班 | 2 |
Null | Null | 3 | 三班 | 4 |
(4) 完全联接
Select A.*,B.* from A full join B on A.studentID =B.studentID
结果:
studentID | Name | courseID | courseName | studentID |
1 | 张三 | 1 | 一班 | 1 |
2 | 李四 | 2 | 二班 | 2 |
3 | 王五 | Null | Null | Null |
Null | Null | 3 | 三班 | 4 |
总结
许多知识都是我们要一直反复和使用的,当我们发现自己忘了的时候一定要总结一下,否则什么都没有收获到!