目录

关联查询

▐ 概述

▐ 内连接

○ 思考?

▐ 左外连接

▐ 右外连接


关联查询


 •  我们以这四张关联表为基础,进行关联查询的演示:

 •  这四张表的创建在 上一篇---多表设计 有讲解到,有疑问的小伙伴可以参考:

MySQL数据库—多表设计(有这一篇够!)_mysql创建多表-CSDN博客

▐ 概述

 •  关联查询也称为多表查询

 •  关联查询有内连接和外连接  (外连接又分为左外连接,右外连接)

▐ 内连接


 •  内连接只把满足条件的筛选出来

 •  实际应用:例如我们想要查询某个学生的专业名称 (此时数据来源于两张表)

 •  这是个错误案例:

select * from student ,major

 •  此时表与表没有添加任何关联条件,会导致出现笛卡尔乘积现象

所以我们需要为其添加条件:

 •  内连接方式一: • 

-- 内连接,只把满足条件的筛选出来
SELECT * FROM student ,major WHERE majorid=id

 •   内连接方式二:

SELECT * FROM student INNER JOIN major ON majorid=id

在添加条件后就可以拿到我们想要的结果了:

以上我们查询是所有的列(select *),但是当我们查询特定列的信息时会发现两个表中都有NAME,

此时系统是不知道这个NAME是哪个表中的NAME,就会报错,所有就需要给表重新命名。

SELECT s.num,s.name,m.name FROM student s INNER JOIN major m ON s.majorid=m.id

重新命名的语法:原表名  AS  新表名 (AS可省略)

○ 思考?

 •  在现实中,如果某个学生还未分配专业,使用内查询还会查到该学生的信息吗?

答案是不会的,此时该学生没有分配专业,majorid列为空,不满足内连接的条件

 •  但这种情况下如果我们还想获取此学生的信息该怎么办呢?

所以就引出了外连接

▐ 左外连接


 •  把左边表中所有的数据查询出来,右边表中只会查询出满足条件的

 •  实际应用:

SELECT 
*
FROM student s LEFT JOIN major m ON s.majorid=m.id

此时在学生表中再添加一行学生信息但不为其分配专业 (majorid列保持为空) 

我们发现朴树虽然没有分配专业 (majorid列为null), 但还是将朴树的学生信息(左表)显示了出来,

如果这里使用内连接是不会显示的

▐ 右外连接


 •  有了对左外连接的了解,右外连接顾名思义就是把右边表中所有的数据查询出来,左边表中只会查询出满足条件的

结语:

希望这篇关于MySQl数据库—关联查询的介绍到能对大家有所帮助,欢迎大佬们留言或私信与我交流学海漫浩浩,我亦苦作舟!大家一起学习,一起进步!

本人微信: g2279605572


Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐