当前位置:Gxlcms > 数据库问题 > SQL中各种连接的区别是什么

SQL中各种连接的区别是什么

时间:2021-07-01 10:21:17 帮助过:17人阅读

成绩表(A)
ID Course Mark
学号 课程 成绩
1 语文 99
1 数学 100
2 语文 60
3 语文 70

至于具体学生姓名,老师自己另外有一个学生姓名表进行登记,不过由于老师工作比较马虎,这个姓名表登记不太完整:

学生表(B)
ID Name
学号 姓名
1 小曾
2 小陈
4 小黄

现在如果老师想做一个完整的成绩表,包含了学号、课程、成绩及姓名的,类似如下格式,就需要用到Join语句了:

完整成绩表(C)
ID Course Mark Name
学号 课程 成绩 姓名
       
       
       
       
       
       

场景一:老师只想知道成绩表里面这些人究竟是谁,至于没来参加考试的,即便在姓名表里面,也不需要知道。

这个时候就需要使用Left Join了:以左表为准,匹配右表,右有就返回,没有就为空。

技术图片

Select A.ID,A.Course,A,Mark,B.Name from A left join B on a.ID=B.ID

结果如下:

完整成绩表(C)
ID Course Mark Name
学号 课程 成绩 姓名
1 语文 99 小曾
1 数学 100 小曾
2 语文 60 小陈
3 语文 70

Null

说明:

虽然3号同学语文考了70分,但是学生表中没有他,作为无名之辈,他的姓名体现为Null。

虽然4号同学在学生表中,但是他没来参加考试,所以结果直接没有他。

 

场景二:老师只想知道学生表里面这些人的考试成绩,至于不在学生表中的人,考100人老师也不关心。

这个时候就需要使用Right Join了:以右表为准,匹配左表,左表有就返回,没有就为空。

技术图片

Select A.ID,A.Course,A,Mark,B.Name from A Right Join B on a.ID=B.ID

结果如下:

完整成绩表(C)
ID Course Mark Name
学号 课程 成绩 姓名
1 语文 99 小曾
1 数学 100 小曾
2 语文 60 小陈
4 Null Null 小黄

说明:

小黄同学在学生表中,但是没参加考试,所以课程及成绩为Null。

虽然3号同学语文考了70分,但是学生表中没有他,所以结果直接没有他。

 

场景三:老师只想知道在学生表里面,并且参加了考试的人的成绩。

这个时候就需要用到Inner Join了:两表匹配,只有两个表中都有的数据才返回。

技术图片

Select A.ID,A.Course,A,Mark,B.Name from A inner join B on a.ID=B.ID

结果如下:

完整成绩表(C)
ID Course Mark Name
学号 课程 成绩 姓名
1 语文 99 小曾
1 数学 100 小曾
2 语文 60 小陈

说明:

小黄同学在学生表中,但是没参加考试,所以结果直接没有他。

虽然3号同学语文考了70分,但是学生表中没有他,所以结果直接没有他。

 

场景四:老师什么都想知道,要一个最完整的表,没来考试或者来考试但没有姓名的都要列出来。

这个时候就需要用到Full Outer Join了:两表匹配,只要任意一个表有的数据就都返回。

技术图片

Select A.ID,A.Course,A,Mark,B.Name from A full outer join B on a.ID=B.ID

结果如下:

完整成绩表(C)
ID Course Mark Name
学号 课程 成绩 姓名
1 语文 99 小曾
1 数学 100 小曾
2 语文 60 小陈
3 语文 70 Null
4 Null Null 小黄

说明:

3号同学是无名之辈,所以姓名是Null。

小黄同学没参加考试,所以课程及成绩都是Null。

SQL中各种连接的区别是什么

标签:image   说明   工作   场景   color   vlookup   语句   保护   strong   

人气教程排行