MySQL表联结

Posted Python数据分析之旅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL表联结相关的知识,希望对你有一定的参考价值。


一.内联结

这里我用两张简单表进行讲解。

MySQL表联结

按照id字段进行连接,只有14进行连接,其余数据不满足条件。

MySQL表联结

最终只显示1和4连接的数据表,其余数据隐藏。

MySQL表联结

#接下来我们做一个练习#我们第一张表学生表,具体数据如下select * from stu;

MySQL表联结

#我们第二张表成绩表,具体数据如下select * from score;

MySQL表联结

#我们按照学生表学号与成绩表学号进行内连接#由于两张表中都含有sno字段,我们需要进行重命名mysql> select * from stu as s1 -> inner join score as s2 -> on s1.sno=s2.sno;#只显示连接条件成立数据,其余数据隐藏注意:MySQL中不允许两个字段的列名称一样,此处完全为了讲解方便我们不进行处理

MySQL表联结


二.左联结

解释:左边表为主表(left关键字左边的表),按照连接条件在右边表中进行匹配数据,如果满足匹配条件就直接显示,否则用NULL填充。图中灰色部分表示空值注意:不管结果怎样,我们都不会看到右表中id为56的字段对应数据

MySQL表联结

mysql> select * from stu as s1 -> left join score as s2 -> on s1.sno=s2.sno;#此处我们利用了左联结,左表数据完整,右表中条件不成立数据字段用NULL填充

MySQL表联结


三.右联结

解释:右边表为主表(right关键字左边的表),按照连接条件在左边表中进行匹配数据,如果满足匹配条件就直接显示,否则用NULL填充。图中灰色部分表示空值注意:不管结果怎样,我们都不会看到左表中id23的字段对应数据

MySQL表联结

mysql> select * from stu as s1 -> right join score as s2 -> on s1.sno=s2.sno;#此处我们利用了右联结,右表数据完整,左表中条件不成立数据字段用NULL填充

MySQL表联结


四.全联结

解释:将左联结和右联结合并在一起,也就是引用了左表和右表中所有记录,,如果左表有的右表没有整合后用缺失值填充,反之亦然。

MySQL表联结

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;

MySQL表联结


五.自联结

自联结:自联结主要用于表中其他数据与某一数据进行比较,这时候可以将自身表看作其他一张表,通过两表联结查找所需数据

此处我们利用一张员工表,它有三个字段,员工id,员工姓名,员工领导select * from emp;

MySQL表联结

#我们目的是统计每个员工下属,没有下属员工记为0mysql> 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表联结

#我们目的是统计每个员工下属,没有下属员工隐藏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表联结


六.交叉联结

解释:返回被联结两个表所有的数据行组合

MySQL表联结

#我们这里有两张表,学生表和课程表#学生表内容mysql> select * from stu;

MySQL表联结

#成绩表内容mysql> select * from course;

mysql> select * from stu cross join course;#进行交叉联结后数据展示


以上是关于MySQL表联结的主要内容,如果未能解决你的问题,请参考以下文章

MySQL必知应会-第15章-联结表

mysql联表查询,使用phpStudy自带的

MySQL数据库 (下)

MySQL表联结

MySQL 查询联结表返回重复行

具有多个表的联结表上的 MySQL SELECT 查询