当前位置: 首页 > news >正文

MySQL零基础教程15—简单的表连接(join)

在学习子查询的时候,我们已经感受到了,在一个语句中,通过访问不同表的数据最终获取我们想要的结果这种操作方式,实际上在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想连多少表,就可以连多少表,规则相同

select
    student_name,
    teacher_name,
    class_name
from
    students,
    teachers,
    classes
where
    students.class_id = classes.class_id
    and teachers.teacher_id = classes.head_teacher_id;

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

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

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

select
    teacher_name
from
    teachers,
    classes,
    students
where
    teachers.teacher_id = classes.head_teacher_id
    and classes.class_id = students.class_id
    and students.student_name = '李晓红';

在这里插入图片描述

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

相关文章:

  • Windows系统还原详解
  • 51单片机使用DS18B20温度传感器
  • day27 第八章 贪心算法 part01
  • 深度学习R8周:RNN实现阿尔兹海默症(pytorch)
  • 补丁供应链案例:CVE-2024-7254. Protobuf. Google
  • FastGPT 引申:知识库辅助开发(代码符号自动提取与文件匹配工具详解)
  • FastGPT 引申:如何基于 LLM 判断知识库的好坏
  • cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼
  • 51c自动驾驶~合集53
  • 从建筑设计到施工工具:软件体系结构与框架的协同之道
  • el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头
  • RK3568平台(GPIO篇)libgpiod的使用
  • 为AI聊天工具添加一个知识系统 之133 详细设计之74通用编程语言 之4 架构及其核心
  • AI学习笔记:LM studio大模型加载参数说明
  • Hutool一个类型转换工具类 `Convert`,
  • Redis——缓存穿透、击穿、雪崩
  • 力扣-动态规划-115 不同子序列
  • 线代[9]|线性代数主要内容及其发展简史(任广千《线性代数的几何意义》的附录1)
  • FastGPT 引申:混合检索完整实例
  • SSL: CERTIFICATE_VERIFY_FAILED Error in Python 是什么问题?
  • 福州市网站/网站seo文章该怎么写
  • 南山做网站多少钱/推广网站推广
  • 汽车之家官网首页/简述如何优化网站的方法
  • js 做网站/环球网最新消息
  • 深圳住房与建设局官方网站/国内新闻最新消息十条
  • 怎么自己建设个网站/就业seo好还是sem