MySQL表联结
Posted Python数据分析之旅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL表联结相关的知识,希望对你有一定的参考价值。
一.内联结
这里我用两张简单表进行讲解。
按照id字段进行连接,只有1和4进行连接,其余数据不满足条件。
最终只显示1和4连接的数据表,其余数据隐藏。
#接下来我们做一个练习
#我们第一张表学生表,具体数据如下
select * from stu;
#我们第二张表成绩表,具体数据如下
select * from score;
#我们按照学生表学号与成绩表学号进行内连接
#由于两张表中都含有sno字段,我们需要进行重命名
mysql> select * from stu as s1
-> inner join score as s2
-> on s1.sno=s2.sno;
#只显示连接条件成立数据,其余数据隐藏
注意:MySQL中不允许两个字段的列名称一样,此处完全为了讲解方便我们不进行处理
二.左联结
解释:左边表为主表(left关键字左边的表),按照连接条件在右边表中进行匹配数据,
如果满足匹配条件就直接显示,否则用NULL填充。图中灰色部分表示空值
注意:不管结果怎样,我们都不会看到右表中id为5,6的字段对应数据
mysql> select * from stu as s1
-> left join score as s2
-> on s1.sno=s2.sno;
三.右联结
解释:右边表为主表(right关键字左边的表),按照连接条件在左边表中进行匹配数据,
如果满足匹配条件就直接显示,否则用NULL填充。图中灰色部分表示空值
注意:不管结果怎样,我们都不会看到左表中id为2,3的字段对应数据
mysql> select * from stu as s1
-> right join score as s2
-> on s1.sno=s2.sno;
四.全联结
解释:将左联结和右联结合并在一起,也就是引用了左表和右表中所有记录,,如果
左表有的右表没有整合后用缺失值填充,反之亦然。
mysql> select * from stu as s1
-> left join score as s2
-> on s1.sno=s2.sno
->
-> union
->
-> select * from stu as s1
-> right join score as s2
-> on s1.sno=s2.sno;
五.自联结
自联结:自联结主要用于表中其他数据与某一数据进行比较,这时候可以将自身表
看作其他一张表,通过两表联结查找所需数据
此处我们利用一张员工表,它有三个字段,员工id,员工姓名,员工领导
select * from emp;
#我们目的是统计每个员工下属,没有下属员工记为0
mysql> select eno,ename,count(branch)
-> from
-> (Select e1.eno,e1.ename,e2.eno as branch
-> from emp e1
-> Left outer Join emp e2 on e1.eno = e2.director_id)e
-> group by eno,ename;
#此处我们利用了左联结与SQL嵌套查询,后面我们会讲到嵌套查询
#用左联结原因是我们要让所有员工姓名显示
#我们目的是统计每个员工下属,没有下属员工隐藏
mysql> select eno,ename,count(branch)
-> from
-> (Select e1.eno,e1.ename,e2.eno as branch
-> from emp e1
-> inner Join emp e2 on e1.eno = e2.director_id)e
-> group by eno,ename;
#此处我们利用了内联结与SQL嵌套查询,后面我们会讲到嵌套查询
#用内联结原因是我们只想让有下属员工显示,没有下属员工隐藏
【注意】:通过该练习题目我们更加深入理解了左联结与内联结之间区别
六.交叉联结
解释:返回被联结两个表所有的数据行组合
#我们这里有两张表,学生表和课程表
#学生表内容
mysql> select * from stu;
mysql> select * from course;
mysql> select * from stu cross join course;
以上是关于MySQL表联结的主要内容,如果未能解决你的问题,请参考以下文章