您的位置:首页 > 房产 > 家装 > 丹阳房产网_深圳画册设计师_成人职业培训学校_软件商店安装

丹阳房产网_深圳画册设计师_成人职业培训学校_软件商店安装

2025/3/7 4:01:25 来源:https://blog.csdn.net/qq_39824110/article/details/146026927  浏览:    关键词:丹阳房产网_深圳画册设计师_成人职业培训学校_软件商店安装
丹阳房产网_深圳画册设计师_成人职业培训学校_软件商店安装

在学习子查询的时候,我们已经感受到了,在一个语句中,通过访问不同表的数据最终获取我们想要的结果这种操作方式,实际上在mysql中,还有更加有趣的一个功能,就是表连接,同样是在查询数据的时候连接不同的表。

基础概念

关系表

假如有这样的场景:
有一个图书馆中存放图书信息的数据库,其中有一个表,存储的是图书信息

在这个表中,存放了书名,书籍编码、作者、书记存放位置

还有一个借阅登记表,里边记录了借书人姓名、借书卡号、借的书籍编码、借书日期

两个表不是毫无关系的,而是通过书籍编码关联了起来,我们查看借阅登记表,比如A同学借了一本书,我们想知道借了什么书,就直接根据书记编码去图书信息中查找

这种方式就实现了两个表通过某一个关系连接起来,我们也称之为关系表

关系表的优势:

  • 分工明确:每张表只负责一类信息。
  • 高效联动:通过关键字段(如用户ID、书号)快速关联。
  • 数据干净:避免重复和错误,比如改地址只需改一次。

外键的概念:

在上边的例子中,借阅信息表中,存放了图书信息表的书籍编码这个字段,我们就称借阅信息表中的书籍编码叫做外键

借阅信息表的这个外键是书籍信息表中的主键值

上边的这种表的设计方式的有点就是这样的数据库可伸缩性好

简单的多表查询

这里还使用一个简单的学校信息的场景作为例子:

select student_name, teacher_name, class_name from students, classes where students.class_id=classes.id order by class_id;

在这里插入图片描述
从上边可以看出,指定查找哪个表的哪个列的语法是:表名.列名
from中也出现了两个表的名称,因为查找的字段是来自于两个表的数据

这里的where子句很重要,它保证了根据第一个表的信息一一与第二个表的信息匹配,逐行找出满足条件的数据,如果没有where相当于全排列,也就是返回了两个表信息的笛卡尔积

内连接:inner join

在上边的例子中,我们用的是两个表的某个字段相等的条件,这种连接方式叫做“等值连接”,对于这种连接,还有一种语法,就是使用inner join

select student_name, class_name from students inner join classes on students.class_id=classes.class_id;

在这里插入图片描述
效果是一样的

上边的sql我们使用的是inner join指定了要连接的表名,然后通过on子句写出过滤条件,实际上与where的作用是一样的

多表连接

在mysql中,一个sql想连多少表,就可以连多少表,规则相同

selectstudent_name,teacher_name,class_name
fromstudents,teachers,classes
wherestudents.class_id = classes.class_idand teachers.teacher_id = classes.head_teacher_id;

在这里插入图片描述
知道了连接之后,我们再回到子查询中的例子:

查询名字叫李晓红同学的班主任姓名

这个时候就多了一种解法了:

selectteacher_name
fromteachers,classes,students
whereteachers.teacher_id = classes.head_teacher_idand classes.class_id = students.class_idand students.student_name = '李晓红';

在这里插入图片描述

通过以上的例子,我们大概可以初步认识表连接的概念以及简单的用法(内连接),下一篇一起学习更加复杂的表连接的用法吧!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com